如何使我的xml安全地进行解析(当它具有&字符时)?

我已经获得了一个xml字符串,我需要通过解析器。 它目前因为非法的xml字符而抱怨。 很简单的例子:

this & that 

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

简单的字符串替换不是正确的方法,因为’&’在XML中具有特殊含义,并且全局替换’&’与’&’ 会破坏预期的特殊含义。 是否有一个解决方案来获取一个完整的xml文档并“修复”它以便’&’成为’&’,但只是在预定的位置? 我可以安全地将’&’替换为’& ‘(注意两边的空格)?

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

我建议请求本文档的提供者来解决它。 实际上,它不是 (有效的)XML! 如果他们自己采用XML格式,他们应该修复它。

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

为什么不在包含其他XML内容的任何XML标记内使用CDATA部分? 然后单独的&符号不会成为问题。

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

但听起来这是你给出的一段XML,所以我建议使用Apache Commons Lang来做这件事。 它有一个’StringEscapeUtils’类,它有你正在寻找的方法,escapeXml(String)。