在specification by W3c中,我似乎无法找到允许在XML文档中的属性值中出现的字符集的定义。
请引用说明书的部分来回答我的问题。
答案 0 :(得分:5)
XML属性允许character data(a.k.a.CDATA)。请参阅&{34;字符串类型"下的formal definition of attribute types。
从根本上说,必须在XML源(即,在文本编辑器中出现)和DOM(即,在解析XML源之后存在于内存中)之间产生差异。
属性可以包含XML源中的文字换行符(\n
),如下所示:
<elem attr="a
linebreak">
但是这些换行符将在XML解析期间转换为空格。这称为attribute-value normalization。
为了在解析后获取换行符,必须将其编码在XML源中,作为

或等效的
。
通常,当您操作文档并保存文档时,DOM API会为您执行此操作。遗憾的是,there are non-compliant APIs无法正确编码属性值中的换行符。这些API使得无法保留换行符。
制表符(\t
)也会出现同样的情况。它可能存在于XML源代码中,但在解析时将被规范化为单个空间。为了防止必须将其编码为	
或	
。
结论:如果您通过API与XML文档进行交互(并且您应该!),那么所有这些细节都将由您处理,除非API被破坏。
为了完整起见:由于相当短视(恕我直言)的决定,XML源代码中的属性内部允许使用文字>
个字符。仅禁止文字<
:
<elem attr="this > that" /> <!-- legal syntax -->
<elem attr="this < that" /> <!-- syntax error -->
我建议不要使用那个怪癖。大多数API都会插入转义后的表单>
:
<elem attr="this > that" />
<elem attr="this < that" />
答案 1 :(得分:3)
Section 2.3定义了常见的句法结构。特别是AttValue
规则:
AttValue ::= '"' ([^<&"] | Reference)* '"'
| "'" ([^<&'] | Reference)* "'"
答案 2 :(得分:2)
http://www.w3.org/TR/xml/#NT-AttValue是您正在寻找的产品,实质上它表示属性值可能包含任何字符,除了小于,&符号(有效字符或实体引用的部分除外)或引用值周围使用的字符(单引号属性可以包含双引号,双引号属性可以包含单引号但反之亦然)。
正如Tomalak所述,换行符是允许的,但解析器不会将它们报告为换行符。