我正在尝试使用Delphi XE2将程序与第三方服务集成。我遇到的问题是该服务没有转发他们发送给我的XML文档中的任何值。
这是他们的“样本”xml文档之一
<plans type="array">
<plan>
<id type="integer">1</id>
<series-title>A New Plan</series-title>
<dates>January 16 & 17, 2010</dates>
<plan-title>A New Plan For Your Family</plan-title>
</plan>
...
</plans>
我原来的计划只是将所有数据包装在CDATA
标签中,但这似乎不是一个理想的解决方案。
我还考虑过搜索&
字符并将其替换为&
,但它不会逃脱任何用户输入,包括<
和>
以及对每个无效的xml字符进行搜索和替换听起来也不错。
关于如何处理无效的xml文档的任何建议?
答案 0 :(得分:13)
首先拒绝将这些文档称为“XML” - 它们不是XML。
说服您的供应商,许多人已采用XML并从中获益,如果他们也这样做也是个好主意。
如果您的供应商认为他们向您发送XML,请将其正确。几乎是XML并没有帮助。这就像向您发送无法编译的Java代码。
答案 1 :(得分:6)
无效的XML文档无效。处理它们的正确方法是显示清晰的错误消息,并让发送“XML”的人修复他们的错误。
答案 2 :(得分:2)
如果从服务中获取真正有效的XML是不可能的,那么通过Tidy之类的东西运行XML并解析生成的文档可能会有所帮助:
tidy --xml-input true --xml-output true input.xml
也可以通过stdin提供整洁的文档,并使用stdout和stderr接收结果,如果你不想将文件写入磁盘只是为了通过这样的方式运行它。
这样做总是有风险,因为根据源文档中的“不正确”,“清理”文档可能缺少属性,元素等。