【问题标题】:how to read and print external (unparsed ) general entity Declaration in xml by dom4j如何通过 dom4j 在 xml 中读取和打印外部(未解析的)通用实体声明
【发布时间】:2023-03-29 06:56:01
【问题描述】:
    String xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
            + "<!DOCTYPE xml [<!ENTITY copy \"&#169;\"> "
            //the next line is missing in output
            + "<!ENTITY logo SYSTEM \"http://www.xmlwriter.net/logo.gif\" NDATA gif>"
            + "<!ENTITY deg \"&#x00b0;\"> ]>\n" + "<root />";

    SAXReader reader = new SAXReader(false);
    reader.setIncludeInternalDTDDeclarations(true);
    reader.setIncludeExternalDTDDeclarations(true);

    Document doc = reader.read(new StringReader(xml));
    StringWriter wr = new StringWriter();
    XMLWriter writer = new XMLWriter(wr);
    writer.write(doc);

    String xml2 = wr.toString();
    System.out.println(xml2);

这是示例。但我找到了,这是输出

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml [
  <!ENTITY copy "©">
  <!ENTITY deg "°">
]><root/>

你可以看到,它错过了一行。我做了一些研究。 打印的实体声明称为内部(解析)实体声明。并且缺少的行称为外部(未解析)实体声明。

因为我想读取xml,更改一些值并导出而不丢失任何数据

我的问题是:

1) 问题出在哪里,丢失的数据已被读入 Document 对象或写入器发生问题,就像我错过了一些配置一样。

2) 如何解决问题?

【问题讨论】:

    标签: java xml entity dtd dom4j


    【解决方案1】:

    答案:

    1) 从SAXContentHandler的来源很明显:

    public void unparsedEntityDecl(String name, String publicId,
            String systemId, String notationName) throws SAXException {
        // #### not supported yet!
    }
    

    2) 可能扩展 SAXContentHandler,创建一个 UnparsedEntityDecl 并设置一个自定义 XMLReader。可能更容易尝试另一个库,也许JDOM2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多