“在XML中使用时出现SAXParseException

时间:2011-10-13 20:26:20

标签: java xml xml-parsing sax

我收到了一个“org.xml.sax.SAXParseException; lineNumber:4; columnNumber:26;实体”ldquo“已被引用,但未被声明。”读取XML文档时的异常。我正在阅读如下:

                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                InputSource is = new InputSource(new StringReader(xmlBody));
                Document document = builder.parse(is);

然后在builder.parse(is)上有一个例外; 从搜索开始,我认为有必要在外部声明一些新实体,遗憾的是,我无法修改原始的XML文档。

如何解决此问题?

由于

2 个答案:

答案 0 :(得分:1)

  

从搜索开始,我认为有必要在外部声明一些新实体,遗憾的是,我无法修改原始的XML文档。

好吧,除非你声明实体,否则文档不是XML,你将无法使用XML解析器处理它。

当要求您处理不是格式良好的XML的输入时,最好的方法是修复创建文档的过程(使用XML进行交换的整个想法依赖于它是格式良好的XML)。替代方案是“修复”文档以将其转换为格式良好的XML(您说您不能这样做),或者忘记它本来是XML的事实,并将其视为任何专有的非-XML格式。

不是一个令人愉快的选择 - 但是当人们向XML提供口惠而不符合标准的字母时,这就是你所遇到的混乱。

答案 1 :(得分:0)

尝试

factory.setExpandEntityReferences(false);

这将阻止解析器尝试扩展实体。

编辑:这个http://xerces.apache.org/xerces2-j/features.html#dom.create-entity-ref-nodes怎么样 - 该页面的顶部有一个如何在底层解析器上设置功能的示例。这应该导致解析器创建实体引用DOM节点,而不是尝试扩展实体。