我正在使用第三方应用程序,并且想要更改其文件之一。该文件以 XML 格式存储,但文档类型无效。
当我尝试读取 use a 时,它会出错,因为文档类型包含“file:///ReportWiz.dtd”
(如图所示,带引号),我得到一个找不到文件的异常。有没有办法告诉文档生成器忽略这个?我已尝试将 DocumentBuilderFactory 的 setValidate 设置为 false 并将 setNamespaceAware 设置为 false。
我能想到的唯一解决方案是
- 将文件逐行复制到一个新文件中,省略有问题的行,执行我需要做的事情,然后复制到另一个新文件中并将有问题的行重新插入,或者
- 与上面的操作基本相同,但使用某种 FileStream(尽管我不清楚如何做到这一点..帮助?)
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
docFactory.setValidating(false);
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(file);
告诉您的 DocumentBuilderFactory 忽略 DTD 声明,如下所示:
docFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
See here http://xerces.apache.org/xerces2-j/features.html获取可用功能的列表。
您还可能会发现 JDOM 比 org.w3c.dom 更容易使用:
org.jdom.input.SAXBuilder builder = new SAXBuilder();
builder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
org.jdom.Document doc = builder.build(file);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)