2011-05-17 54 views
3

我读在W3C XML规范,并在attribute value normalization的部分,这部分引起了我的注意:XML属性值规范化

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

这是否意味着

<tag attr=" a  b " /> 

相当于

<tag attr="a b" /> 

还是我误解了规范说什么?

回答

2

下面是一个例子,以补充@Per Norrman正确答案(+1),你在你的问题中使用的例子:

注释的XML规范审议的细节时,对我帮助很大。

<!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(复数)。

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

这是因attr属性类型为CDATA:

然而因为attr是文字文本(CDATA =字符数据)下面将不等同于NMTOKEN例子。