gpt4 book ai didi

java - 如何解析具有多个字符实体的XML?

转载 作者:行者123 更新时间:2023-11-30 08:07:58 27 4
gpt4 key购买 nike

我有一个 XML 文件,声明它使用 utf-8。当我在 VIM 中打开文件时,我看到类似

<?xml version="1.0" encoding="UTF-8"?> 
<r>
<first-tag>foo</first-tag>
<second-tag>
&lt;a-tag-nested-in-second-tag&gt;some data&lt;/a-tag-nested-in-second-tag&gt;
</second-tag>
...
</r>

我正在使用 Java 1.6.0_41 的 SAXParser,在使用这些数据时,解析器基本上看不到格式错误的文字并跳过它们,或者似乎将格式错误的字符视为 second-tag 的“内容”数据。 .

这是我使用数据的方式,

File f = ...
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
stream = new FileInputStream(f);
AbstractHandler handler = ...
parser.parse(new InputSource(stream), handler);

SAX 有没有办法将嵌套的转义 XML 数据视为真正的 XML 标记,而不仅仅是 second-tag 的数据。 ?

最佳答案

UTF-8 是 character encoding 。在单个文件中包含多个字符编码是没有意义的,也没有显示任何具有多个字符编码的证据。

您所显示的是多个字符实体引用,例如<>。这些不是问题,尽管它们可能表明(有意或无意)转义 XML 标记的输出。

问题是您的“XML”缺少单个根元素,因此不是 well-formed .

如果您为标记指定一个根元素,

<?xml version="1.0" encoding="UTF-8"?>
<r>
<first-tag>foo</first-tag>
<second-tag>
&lt;a-tag-nested-in-second-tag&gt;some data&lt;/a-tag-nested-in-second-tag&gt;
</second-tag>
</r>

XML 解析器能够很好地解析它。

<小时/>

更新每条评论和更新的问题

Is there a way for SAX to treat the nested escaped xml data as truly xml markup and not merely data as-is for "second-tag"?

不,没有一个简单的配置标志可以指示 SAX 将转义 XML 视为常规 XML。 SAX 将正确地将转义的 XML 数据视为字符和字符实体引用。您的选择包括通过以下方式解决上游问题

  1. 消除您希望保留的 XML 的转义,或者
  2. 对转义的 XML 数据进行后处理以重新建立原始数据XML。

请注意,选项 #2 本身可能涉及一个基于 SAX 的解析器,您设计了该解析器的实体处理程序来重建原始 XML。

另请参阅how to unescape XML in java .

关于java - 如何解析具有多个字符实体的XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30814353/

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