gpt4 book ai didi

java - 如何通过 dom4j 读取和打印 xml 中的外部(未解析的)通用实体声明

转载 作者:行者123 更新时间:2023-12-01 10:21:27 29 4
gpt4 key购买 nike

    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)如何解决这个问题?

最佳答案

答案:

1) 从 SAXContentHandler 的来源来看非常明显:

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

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

关于java - 如何通过 dom4j 读取和打印 xml 中的外部(未解析的)通用实体声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580695/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com