是否有Java XML API可以在不解析字符实体的情况下解析文档?

Kay*_* II 4 java xml parsing stax character-entities

我有程序需要解析包含字符实体的XML.程序本身不需要解决它们,它们的列表很大并且会发生变化,所以如果可以的话,我想避免明确支持这些实体.

这是一个简单的例子:

<?xml version="1.0" encoding="UTF-8"?>
<xml>Hello there &something;</xml>
Run Code Online (Sandbox Code Playgroud)

是否存在可以在不解析(非标准)字符实体的情况下成功解析文档的Java XML API?理想情况下,它会将它们转换为可以特殊处理的特殊事件或对象,但我会选择一种可以默默抑制它们的选项.

答案和示例:

Skaffman给了我答案:使用IS_REPLACING_ENTITY_REFERENCES设置为false 的StAX解析器.

这是我试图尝试的代码:

XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);
XMLEventReader reader = inputFactory.createXMLEventReader(
    new FileInputStream("your file here"));

while (reader.hasNext()) {
    XMLEvent event = reader.nextEvent();
    if (event.isEntityReference()) {
        EntityReference ref = (EntityReference) event;
        System.out.println("Entity Reference: " + ref.getName());
    }
}
Run Code Online (Sandbox Code Playgroud)

对于上面的XML,它将打印" Entity Reference: something".

ska*_*man 8

STaX API通过IS_REPLACING_ENTITY_REFERENCES属性支持不替换字符实体引用的概念:

需要解析器将内部实体引用替换为替换文本并将其作为字符报告

这可以设置为a XmlInputFactory,然后用于构造XmlEventReaderXmlStreamReader.但是,API谨慎地说,此属性仅用于强制实现执行替换,而不是强制它替换它们.不过,它还值得一试.