我正在阅读W3C的XML规范,attribute value normalization部分的这一部分引起了我的注意:
如果属性类型不是CDATA,则XML处理器必须通过丢弃任何前导和尾随空格(#x20)字符,并通过用单个空格替换空格(#x20)字符序列来进一步处理规范化的属性值(#x20)角色。
这是否意味着
<tag attr=" a b " />
相当于
<tag attr="a b" />
或者我是否误解了规范所说的内容?
答案 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。