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

标签 java xml parsing stax character-entities

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

这是一个简单的例子:

<?xml version="1.0" encoding="UTF-8"?>
<xml>Hello there &something;</xml>

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

答案和例子:

Skaffman 给了我答案:使用 StAX 解析器并将 IS_REPLACING_ENTITY_REFERENCES 设置为 false。

这是我编写的用于试用的代码:

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());
    }
}

对于上面的 XML,它会打印“Entity Reference: something”。

最佳答案

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

Requires the parser to replace internal entity references with their replacement text and report them as characters

这可以设置到一个 XmlInputFactory 中,然后它又被用来构造一个 XmlEventReaderXmlStreamReader。但是,API 谨慎地说此属性只是为了强制实现执行替换,而不是强制它替换它们。尽管如此,还是值得一试。

关于java - 是否有 Java XML API 可以在不解析字符实体的情况下解析文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777878/

相关文章:

xml - 如何将 xsd 转换为人类可读的文档?

java - 通过 java 套接字发送文件时出错

java - 使用 Java 比较 Spark 中的两个数据帧?

mysql - 在Flash中更新变量后重新请求xml数据

android - 使用 int 变量获取 JSONObject 中的第一个对象

parsing - Go - 包 ast : find package in file

mysql - Perl::Mechanize:使用循环运行一个简单的爬虫[多个查询]

java - 使用AOP后注入(inject)的bean变为null

java - Gradle 同步失败,没有到主机的路由和连接超时

c# - 来自 WebService 的未经净化的 XML,如何净化