我正在编写一个用于XML文件后处理的Java应用程序.这些xml文件来自Semantic Mediawiki的RDF-Export,因此它们具有rdf/xml语法.
我的问题如下:当我读取xml文件时,文件中的所有实体都被解析为它们在Doctype中指定的值.例如,我有Doctype
<!DOCTYPE rdf:RDF[
<!ENTITY wiki 'http://example.org/smartgrid/index.php/Special:URIResolver/'>
..
]>
Run Code Online (Sandbox Code Playgroud)
并在根元素中
<rdf:RDF
xmlns:wiki="&wiki;"
..
>
Run Code Online (Sandbox Code Playgroud)
这意味着
<swivt:Subject rdf:about="&wiki;Main_Page">
Run Code Online (Sandbox Code Playgroud)
变
<swivt:Subject rdf:about="http://example.org/smartgrid/index.php/Special:URIResolver/Main_Page">
Run Code Online (Sandbox Code Playgroud)
我尝试过使用JDOM和标准Java DOM.我认为这里的代码与标准DOM相关:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setExpandEntityReferences(false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
Run Code Online (Sandbox Code Playgroud)
并为JDOM
SAXBuilder builder = new SAXBuilder();
builder.setExpandEntities(false); //Retain Entities
builder.setValidation(false);
builder.setFeature("http://xml.org/sax/features/resolve-dtd-uris", false);
Run Code Online (Sandbox Code Playgroud)
但是实体在整个xml文档中得到了解决.我错过了什么吗?搜索时间只引导我进入'ExpandEntities'命令,但它们似乎不起作用.
任何提示都非常感谢:)