3

我正在尝试使用 Delphi XE2 将程序与 3rd 方服务集成。我遇到的问题是该服务没有转义他们发送给我的 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标签中,但这似乎不是一个理想的解决方案。

我还考虑过搜索该&字符并将其替换为,&amp;但它不会逃避任何用户输入,包括<and>并且对每个无效的 xml 字符进行搜索和替换听起来也是个坏主意。

关于我应该如何处理无效的 xml 文档的任何建议?

4

3 回答 3

13

首先拒绝将这些文档称为“XML”——它们不是 XML。

让您的供应商相信许多人已经采用 XML 并从中受益,如果他们也这样做,那将是一个好主意。

如果您的供应商认为他们正在向您发送 XML,请纠正他们。几乎是 XML 并没有帮助。这就像向您发送无法编译的 Java 代码一样。

于 2012-08-20T18:59:39.600 回答
6

无效的 XML 文档是无效的。处理它们的正确方法是显示清晰的错误消息,并让向您发送“XML”的人修复他们的错误。

于 2012-08-20T18:36:17.460 回答
2

如果从服务中获取真正有效的 XML 是不可能的,那么通过Tidy之类的东西运行 XML并解析生成的文档可能会有所帮助:

tidy --xml-input true --xml-output true input.xml

如果您不想将文件写入磁盘只是为了通过类似的方式运行它,也可以通过 stdin 提供整洁的文档并使用 stdout 和 stderr 接收结果。

但是,这样做总是有风险的,因为根据源文档中的“畸形”,“清理”的文档总是有可能缺少属性、元素等。

于 2012-08-20T18:50:40.193 回答