我发现了一个关于此的问题,但它似乎是一个老问题,答案不再适用Java XML 处理实体问题?
所以我的问题是我实际上使用的是 XML 文件,而且它确实有Entity References
. 我希望这些实体引用保留下来而DocumentBuilder
不是解析它。但是它尝试解析它,然后我得到The entity "entityname" was referenced, but not declared.
异常。
这是我的XmlParser
类构造函数:
public XmlParser(File file) throws ParserConfigurationException,
SAXException, IOException {
String provider = "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(provider, null);
factory.setExpandEntityReferences(false);
factory.setValidating(false);
factory.setFeature(
"http://apache.org/xml/features/nonvalidating/load-external-dtd",
false);
DocumentBuilder dBuilder = factory.newDocumentBuilder();
document = dBuilder.parse(file);
document.getDocumentElement().normalize();
}
我也尝试过不使用DocumentBuilderFactory.newInstance()
任何参数并得到同样的错误。
我该如何解决这个问题?
示例 XML:
<?xml version="1.0" encoding="UTF-8"?>
<chapter >
<title>&entityname; Some Title</title>
</chapter>
例外:
[Fatal Error] NHS.xml.keyref:3:21: The entity "entityname" was referenced, but not declared.
Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/C:/somedir/NHS.xml.keyref; lineNumber: 3; columnNumber: 21; The entity "entityname" was referenced, but not declared.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at au.gov.nehta.mdht.datahierarchy2dita.XmlParser.<init>(XmlParser.java:43)
at au.gov.nehta.mdht.datahierarchy2dita.Parse.parseDocbookToDita(Parse.java:53)
at au.gov.nehta.mdht.datahierarchy2dita.Parse.main(Parse.java:83)