我有程序需要解析包含字符实体的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".