Java 更改和移动非标准的 XML 文件

标签 java xml dom parsing

我正在使用第三方应用程序并想更改其中一个文件。该文件以 XML 格式存储,但文档类型无效。

当我尝试阅读时,由于文档类型包含“file:///ReportWiz.dtd”而出错 (如图所示,带引号)我得到一个找不到文件的异常。有没有办法告诉 docbuilder 忽略这个?我已尝试将 DocumentBuilderFactory 的 setValidate 设置为 false,将 setNamespaceAware 设置为 false。

我能想到的唯一解决办法是

  • 将文件逐行复制到一个新文件中,省略有问题的行,做我需要做的,然后复制到另一个新文件中并将有问题的行重新插入,或者
  • 主要做与上面相同的事情,但使用某种 FileStream(虽然我不清楚如何做到这一点..help?)
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);

参见 here获取可用功能的列表。

您可能还会发现 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);

关于Java 更改和移动非标准的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/358048/

相关文章:

javascript - 在本地文件上使用 jQuery 的 "load"方法

jQuery 和 CSS 冒号选择器

java - 无法使用ip地址访问tomcat

java - 如何在 Dropwizard 中的测试类中初始化包

c# - 如何获取特定节点的值

机器人 : Layout size changes on Orientation

java - 带 Primefaces 图表的 CDI 无法正确渲染

java - 如何获取Vaadin 7应用服务器IP和端口?

java - 在 Java 中使用 XML 验证 XSD 的框架

javascript - 如何将一个 jQuery 代码放入一个文件中,该文件将被所有页面引用?