【问题标题】:Is it absolutely mandatory to replace ">" by ">" in XML files? [duplicate]在 XML 文件中用“>”替换“>”是绝对必要的吗? [复制]
【发布时间】:2019-01-19 20:25:47
【问题描述】:

我有一个简单的 XML 文件

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Document>
 <DATEN>
  <DTA_Coding_Line>0100011509856>249099000000000000004039555+ 010001456></DTA_Coding_Line>
 </DATEN>
</Document>

我已经用几个在线 XML 验证工具验证了这个文件,它不会产生错误。

然而,在 XML 文档中,我可以读到我必须使用 &amp;gt; 转义“>”字符。

  • 这是强制性的吗?
  • 什么时候需要将&amp;gt; 替换为&amp;gt;
  • 如果读取上面这个文件的软件有&amp;gt;没有被转义的问题,它仍然可以被认为是“兼容”XML标准吗?
  • 有这样的“合规”吗?

【问题讨论】:

  • 答案是一些 xml 解析器可能会阻塞嵌入在标记和属性中的 XML 实体,这些标记和属性是作为规范的一部分的保留字符。使用 CDATA 部分将解决这个问题,因为规范规定它可以保存 CDATA 开始和结束序列之间的任何内容,即&lt;![CDATA[]]&gt;
  • HTML 发送时只需要替换。这些是 HTML 的特殊字符,如果 xml 是 html 消息的一部分,则需要替换。
  • 为了将来参考,在 Stack Overflow 上,您可以将 &amp;gt; 格式化为代码(通过周围的 ` 字符),因此您无需添加空格。
  • 根据 W3C XML 建议和 @spodger's answer 此处 (+1),> 当 ]]&gt; 未结束 CDATA 部分时,> 仅需要作为 &amp;gt; 的一部分作为 ]]&gt; 的一部分进行转义。这是非常罕见的(因此在我对What characters do I need to escape in XML documents? 的最终Simplified XML Escaping 回答中被标记为深奥)。

标签: xml xml-parsing


【解决方案1】:

">" 仅在字符串 "]]>" 中使用时才需要转义,其中字符串 "]]>" 未标记 CDATA 部分的结尾。

另一方面,“

Character Data and Markup

链接到的

2.4 字符数据和标记

文本由混合的字符数据和标记组成。 [定义: 标记采用开始标签、结束标签、空元素标签的形式, 实体引用、字符引用、cmets、CDATA 部分 分隔符、文档类型声明、处理指令、XML 声明、文本声明以及位于 文档实体的顶层(即在文档之外 元素,而不是在任何其他标记内)。]

[定义:所有不是标记的文本构成字符 文件的数据。]

& 符号 (&) 和左尖括号 () 可以使用 字符串“>”,并且为了兼容性,必须使用以下任一方法进行转义 " > " 或出现在字符串 " ]]> 中的字符引用 " 在内容中,当该字符串未标记 CDATA 的结尾时 部分。

在元素的内容中,字符数据是任意字符串 它不包含任何标记的起始分隔符,也不包含 包括 CDATA-section-close 分隔符“]]>”。在 CDATA 中 部分,字符数据是任何字符串,不包括 CDATA-section-close 分隔符," ]]> "。

要允许属性值同时包含单引号和双引号, 撇号或单引号字符 (') 可以表示为 " ' ",双引号 (") 为 " " "。

人物资料

[14] CharData ::= [^' [^

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 2012-05-05
    • 2010-10-02
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多