XML属性值规范化

时间:2011-05-17 12:29:51

标签: xml parsing whitespace

我正在阅读W3C的XML规范,attribute value normalization部分的这一部分引起了我的注意:

  

如果属性类型不是CDATA,则XML处理器必须通过丢弃任何前导和尾随空格(#x20)字符,并通过用单个空格替换空格(#x20)字符序列来进一步处理规范化的属性值(#x20)角色。

这是否意味着

<tag attr=" a      b " />

相当于

<tag attr="a b" />

或者我是否误解了规范所说的内容?

2 个答案:

答案 0 :(得分:4)

你的解释是正确的,因为'attr'类型 CDATA,但很可能是。

在仔细检查细节时,带注释的XML规范对我帮助很大: http://www.xml.com/axml/testaxml.htm

答案 1 :(得分:2)

这是一个例子,以补充@Per Norrman(+1)的正确答案以及您在问题中使用的示例。

<!DOCTYPE tag [
<!ELEMENT tag EMPTY>
<!ATTLIST tag
          attr NMTOKENS #IMPLIED>
]>
<tag attr=" a      b "/>

相当于

<!DOCTYPE tag [
<!ELEMENT tag EMPTY>
<!ATTLIST tag
          attr NMTOKENS #IMPLIED>
]>
<tag attr="a b"/>

因为attr的属性类型为NMTOKENS(复数)。

但是,以下内容不等同于NMTOKEN示例,因为attr是文字文本(CDATA =字符数据):

<!DOCTYPE tag [
<!ELEMENT tag EMPTY>
<!ATTLIST tag
          attr CDATA #IMPLIED>
]>
<tag attr=" a      b "/>

这是因为attr的属性类型是CDATA。