我已经获得了一个xml字符串,我需要通过解析器。它目前因为非法的xml字符而抱怨。非常简单的例子:
<someXml>this & that</someXml>
我知道解决方案是用&
替换&
,但我没有生成XML,因此无法控制值。
简单的字符串替换不是正确的方法,因为'&amp;'在XML中具有特殊意义,并且全球取代'&amp;'与'&amp; amp;'会破坏预期的特殊含义。是否有解决方案来获取完整的xml文档并“修复”它以便'&amp;'成为'&amp; amp;',但只是在意图?我可以安全地全球取代'&amp; 'with'&amp; amp; '(注意两边的空格)?
答案 0 :(得分:8)
我建议请求本文档的提供者进行修复。实际上,它是 不是 (有效)XML!如果他们自己采用XML格式,他们应该修复它。
答案 1 :(得分:4)
我认为这是一个有趣的问题,因为这种情况可能真的发生在现实生活中。虽然我认为正确的做法是要求XML提供程序修复XML并使其有效,但我认为有一种选择是尝试使用宽松的解析器。我做了一些搜索,我发现这个blog post正在讨论同样的问题,并提出了我想到的相同解决方案。您可以尝试使用jsoup。让我再说一遍,我认为这不是最好的事情:你应该要求XML提供商修复它。
答案 2 :(得分:0)
你不能这样做,因为你破坏了XML字符(编码她)。您必须将代码重写为生成XML的库。
答案 3 :(得分:0)
目前尚不清楚您是否自己从这个问题中生成XML,但如果您是,您可能希望使用XML库来执行此操作,因为它将首先正确处理编码事项。
但听起来这是你给出的一段XML,所以我建议使用Apache Commons Lang来做这件事。它有一个'StringEscapeUtils'类,它有你正在寻找的方法,escapeXml(String)。
答案 4 :(得分:0)
为什么不在包含其他XML内容的任何XML标记内使用CDATA部分?然后单独的&符号不会有问题。