我有一个程序需要解析包含字符实体的 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
中,然后它又被用来构造一个 XmlEventReader
或 XmlStreamReader
。但是,API 谨慎地说此属性只是为了强制实现执行替换,而不是强制它不替换它们。尽管如此,还是值得一试。
关于java - 是否有 Java XML API 可以在不解析字符实体的情况下解析文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777878/