4

我得到了一个需要通过解析器的 xml 字符串。它目前因为非法的 xml 字符而抱怨。非常简化的例子:

<someXml>this & that</someXml>

我知道解决方案是替换&&amp;,但我没有生成 XML,因此无法控制这些值。

简单的字符串替换不是正确的方法,因为 '&' 在 XML 中具有特殊含义,并且将 '&' 全局替换为 '&' 会破坏原本的特殊含义。是否有一种解决方案可以获取完整的 xml 文档并“修复”它,使“&”变为“&”,但仅限于预期的地方?我可以安全地将 ' & ' 全局替换为 ' & '(注意两边的空格)?

4

5 回答 5

8

我建议请此文件的提供者修复它。事实上,它不是(有效的)XML!如果他们致力于 XML 格式,他们应该修复它。

于 2011-05-11T12:37:06.940 回答
4

我认为这是一个有趣的问题,因为这是现实生活中可能真的发生的情况。尽管我认为正确的做法是要求 XML 提供程序修复 XML 并使其有效,但我认为一种选择是尝试使用宽松的解析器。我进行了一些搜索,发现这篇博客文章讨论了同样的问题,并提出了与我想到的相同的解决方案。您可以尝试使用jsoup。让我再说一遍,我认为这不是最好的做法:您真的应该请求 XML 提供程序来修复它。

于 2011-05-11T12:57:46.297 回答
0

您不能这样做,因为您破坏了 XML 字符(对她进行编码)。您必须将代码重写为生成 XML 的库。

于 2011-05-11T12:29:59.127 回答
0

目前尚不清楚您是否从这个问题中自己生成 XML,但如果是,您可能希望使用 XML 库来执行此操作,因为它首先会正确处理编码。

但听起来这是给您的一段 XML,所以我建议使用 Apache Commons Lang 来执行此操作。它有一个类'StringEscapeUtils',它有你正在寻找的方法,escapeXml(String)。

于 2011-05-11T12:31:16.630 回答
0

为什么不在任何包含额外 XML 内容的 XML 标记内使用CDATA部分?那么单独的&符号就不会成为问题。

于 2011-05-11T12:33:16.990 回答