使用Java的DOM XML API在XML中解析Ampersand

时间:2011-10-12 02:30:20

标签: java xml dom

我正在尝试使用Java DOM API(而不是SAX)解析XML文档。每当解析器在解析文本节点时遇到&符号(&)时,它就会出错。我猜这是可解决的1)转义,2)编码或3)使用不同的解析器。

我正在阅读一份我无法控制的XML文档,因此每次阅读时都无法准确识别文档中的&符号。

我在类似问题上看到的答案建议在解析XML时替换实体类型,但我不确定我是如何做到这一点的,因为它在遇到XML&符号时甚至都不会解析。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

如上所述,XML格式错误(哎呀!):XML中出现&的所有内容(除了引入字符实体的标记[?])必须编码为&

一些解决方案(基本上与帖子中描述的一样!):

  1. 修复XML(在源头或在hack-it-up阶段)或;
  2. 使用“适当的”工具(例如“宽容的”HTML解析器)解析它
  3. 对于“hack-it-up”方法,请考虑单独的输入流 - 请参阅Working with Filter Streams - 作为过滤器之前执行到实际的DOM解析器:每当遇到&(不是字符实体的一部分),它通过将&插入流来“修复它”。当然,如果XML源没有得到正确的基本编码......

    快乐的编码。

答案 1 :(得分:2)

“我正在阅读一份我无法控制的XML文档”。

不,您正在阅读非XML文档。您收到错误的原因是,当您阅读不是XML的内容时,XML解析器需要给您一个错误。

XML文化是生成格式良好的XML的责任在于发送者。您需要更改生成此数据的任何内容才能正确执行此操作。否则,你可能会忘记XML及其好处,然后回到私人约定的协议和自定义解析器的混乱世界。