无法分析java中包含html字符实体的xml

无法分析java中包含html字符实体的xml,java,xml,Java,Xml,当xml由html字符实体组成时,它会引发如下异常 [com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException: Undeclared general entity "ensp" at [row,col {unknown-source}]: [1,66475] 是否有任何方法可以声明通用实体,以便我不必处理此异常。实体“ensp”是一个空格字符实体,您可以解析该属性的XML/HTML,然后替换为其他内容

当xml由html字符实体组成时,它会引发如下异常

[com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException: Undeclared general entity "ensp"
at [row,col {unknown-source}]: [1,66475]
是否有任何方法可以声明通用实体,以便我不必处理此异常。

实体“ensp”是一个空格字符实体,您可以解析该属性的XML/HTML,然后替换为其他内容

        File file = new File(yourFile);
        BufferedReader bufferedReader = new BufferedReader(file);

        StringBuilder stringBuilder = new StringBuilder();
        String inputLine;

        while ((inputLine = bufferedReader.readLine()) != null) {
            stringBuilder.append(inputLine);
        }

        String content = stringBuilder.toString();
        content = content.replace("ensp;", " ");
举个例子


编辑:对不起,你问错了。这可能不是你想要的答案

听起来您缺少Woodstox XML解析器的一些配置:

p_TREAT_CHAR_REFS_AS_ENTS(默认值:false):通常,字符引用(如&)只是展开并作为字符数据的一部分报告;但如果此属性设置为true,它们将作为实体标记报告。当尝试完全再现XML文档的输入表示时,这有时可能很有用,包括选择特殊字符的转义。 注意:这仅适用于文本内容 — 不可能支持属性值(因为没有单独的标记;属性只能通过START_元素标记访问)

Api文档:

如果您可以编辑正在解析的XML,并且XML在文档开头有DOCTYPE声明,则需要为
ensp
添加实体声明:

<!ENTITY ensp "&#8194;">

如果可以编辑XML,但它没有DOCTYPE声明,则可以编写一个通用声明,如下所示:

<!DOCTYPE root [
  <!ELEMENT root ANY>
  <!ENTITY ensp "&#8184;">
]>
... content ...

]>
... 内容。。。
其中,
root
被您拥有的XML数据的文档元素(根元素)替换

如果要将所有HTML实体扩展为数字字符实体(而不仅仅是
ensp
),请查看或


如果您无法访问、无法更改或不想更改XML(例如,当您从网络中提取XML时),那么您可能会幸运地使用Java的JAXP API开发一个自定义的
EntityResolver
,并使用自定义的实体解析器(cf.)进行XML解析管道.

@BibekShakya StAX/woodstox的一般技术在eg中进行了解释。尽管我发现它不适用于海报,因为海报似乎与您的问题完全相同:对未声明实体的引用在XML中无效,因此会被拒绝。如果您想解析HTML,我建议使用HTML或SGML解析器而不是XML解析器,尽管Java的选项有限。