在Java中解析XML文件时,如何避免读取DTD?

enti

我需要解析XML文档,该文档以以下几行开头:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">

<pdf2xml producer="poppler" version="0.22.0">
<page number="1" position="absolute" top="0" left="0" height="1263" width="892">
    <fontspec id="0" size="12" family="Times" color="#000000"/>

我使用以下代码阅读:

    final DocumentBuilder builder;
    DocumentBuilderFactory builderFactory =
            DocumentBuilderFactory.newInstance();

    builder = builderFactory.newDocumentBuilder();

    Document document = builder.parse(
            new FileInputStream(aXmlFileName));

最后一次呼叫失败,但以下异常:

Exception in thread "main" java.io.FileNotFoundException: D:\dev\ro-2014-04-13-01\pdf2xml.dtd
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileInputStream.<init>(FileInputStream.java:101)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:613)

文件pdf2xml.dtd实际上在指定目录中不存在。

我如何修改代码,以便尽管没有文档也可以对文档进行解析pdf2xml.dtd

阿尔吉特

您需要使用 Entity Resolver

 myBuilder.setEntityResolver(new EntityResolver() {
    @Override
    public InputSource resolveEntity(String publicId, String systemId)
            throws SAXException, IOException {
        if (systemId.contains("pdf2xml.dtd")) {
            return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
        } else
           return null;
    }
});

当解析器达到条件-“ pdf2xml.dtd”时,将调用实体解析器,该解析器返回一个空的XML文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Java / Jboss中的帖子中读取响应时如何避免dtd验证

在 Java 中解析 XML 文件时出错

如何使用本地 DTD 文件通过 lxml 解析 XML 文件?

在Java中读取xml文件和解析器

解析DTD文件以验证HTML时,Java 13 DocumentBuilder中断

如何在 Python(XML 模式)中读取/解析 .xls 文件

在Java中读取XML文件时出现非法参数异常

如何在Java中读取或解析MHTML(.mht)文件

读取Java中的xml文件

在解析缺少元素的 XML 文件时避免 NullReferenceException

java:使用从PEM文件读取的RSA公钥解密数据时,如何避免IllegalBlockSizeException?

如何强制Go的标准xml解析器读取DTD实体

如何避免每次创建新实例时从文件中读取数据

从 Python 中的 csv 文件读取字符串时如何避免双重转义(\\)?

如何读取/解析xml java STAX(机制)

如何在java中读取XML配置文件

如何在 Java 中读取多个 XML 文件?

java ee:如何读取资源中的xml文件

从bash中的文件读取时如何读取

在 pandas 中读取文件进行比较时避免嵌套 for 循环

从java中读取文件时如何确定空格的类型?

如何使用Java从xml解析时从json中删除元素

如何在Java中解析大(50 GB)XML文件

如何使用Java中的xPath正确解析此XML文件?

如何从文件中读取并解析它

在某些元素中插入 ElementTree 时,如何避免在生成的 XML 文件中出现错误缩进?

如何避免JSP文件中的Java代码?

如何使用Java读取XML文件?

在Java中解析大型XML文件时,找不到文件异常