我有需要解析包含字符实体的 XML 的程序。程序本身不需要解决它们,它们的列表很大并且会改变,所以如果可以的话,我想避免对这些实体的显式支持。
这是一个简单的例子:
<?xml version="1.0" encoding="UTF-8"?>
<xml>Hello there &something;</xml>
是否有可以在不解析(非标准)字符实体的情况下成功解析文档的 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());
}
}
对于上面的 XML,它将打印“ Entity Reference: something
”。