XML 文件中的特殊字符 - 使用 DOM API 进行处理

2023-12-25

我有一个 XML 格式的文件(仅包含根开始标签和结束标签以及根的子标签)。子级的文本元素包含与符号 &。在 XML 中,为了使文档有效,不允许使用此符号,当我尝试使用 Java 中的 DOM API 和 XML 解析器处理该文件时,出现解析错误。因此,我将 & 替换为&,并且我成功处理了该文件:我必须提取不同纯文本文件中文本元素的值。

当我打开这些新创建的文本文件时,我希望看到&,但有 & 代替。为什么是这样?我已将文本存储在没有任何扩展名的文本文件中(我的 XML 格式的原始文件也没有 .xml 扩展名),并且无论我如何打开文件,我在新文件的文本中都只有 & :作为 txt 或作为 xml 文件(这些是我的 XML 编辑器中的一些选项)。到底发生了什么? Java(?)是否转换&自动?或者有一些默认编码?出色地,&代表 & ,我想有一些“看不见的”自动转换,但我很困惑这种情况何时以及如何发生。以下是我的原始文件和使用 Java 处理原始文件后收到的提取文件的示例:

这是我的 XML 格式的“负面评论”文件:

<review>
<review_text>
I will not wear it as it is too big &amp; looks funny on me. 
</review_text>
</review>

这是我提取的文件“negative_1”:

I will not wear it as it is too big & looks funny on me. 

对我来说,重要的是保持原始数据原样(不进行任何转换/替换),所以我认为我必须处理提取的文件“negative_1”转换回来&amp;到 &。正如你所看到的,我似乎不必这样做。但我不明白为什么:(。

先感谢您!


原因很简单:XML 文件确实包含 an "&"特点。

它只是以不同的方式表示(即“转义”),因为真正的"&"如您所见,它本身会破坏 XML 文件。阅读 XML 1.0 规范中的相关部分:“2.4 字符数据和标记” http://www.w3.org/TR/REC-xml/#syntax。虽然只有几行,但已经很好地解释了这个问题。

XML 是数据的表示形式(!)。不要将其视为文本文件。例子:

您想要将字符串“17

<xml>17 < 20</xml>

解决方案:您对特殊/保留字符使用字符转义,只是为了保留文件的有效性:

<xml>17 &lt; 20</xml>

出于所有实际目的,上面的代码片段包含以下数据(这次采用 JSON 表示形式):

{
  "xml": "17 < 20"
}

这就是为什么你看到真实的"&"在你的后期处理中。它以同样的方式逃脱了,但它是meaning一直保持不变。

上面的例子也解释了为什么"&"必须特殊对待:它本身就是 XML 转义机制的一部分。它标志着转义序列的开始,就像"&lt;"。因此它本身必须被转义(与"&amp;",就像你所做的那样)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML 文件中的特殊字符 - 使用 DOM API 进行处理 的相关文章

随机推荐