XML属性中允许哪些字符?

时间:2013-11-04 11:21:33

标签: xml

specification by W3c中,我似乎无法找到允许在XML文档中的属性值中出现的字符集的定义。

  1. 是否与元素的文本内容相同?
  2. 或者它只是一个子集(不包括例如\ n)?
  3. 请引用说明书的部分来回答我的问题。

3 个答案:

答案 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源中,作为&#xA;或等效的&#10;

通常,当您操作文档并保存文档时,DOM API会为您执行此操作。遗憾的是,there are non-compliant APIs无法正确编码属性值中的换行符。这些API使得无法保留换行符。

制表符(\t)也会出现同样的情况。它可能存在于XML源代码中,但在解析时将被规范化为单个空间。为了防止必须将其编码为&#x9;&#9;

结论:如果您通过API与XML文档进行交互(并且您应该!),那么所有这些细节都将由您处理,除非API被破坏。


为了完整起见:由于相当短视(恕我直言)的决定,XML源代码中的属性内部允许使用文字>个字符。仅禁止文字<

<elem attr="this > that" />  <!-- legal syntax -->
<elem attr="this < that" />  <!-- syntax error -->

我建议不要使用那个怪癖。大多数API都会插入转义后的表单&gt;

<elem attr="this &gt; that" />
<elem attr="this &lt; that" />

答案 1 :(得分:3)

Section 2.3定义了常见的句法结构。特别是AttValue规则:

AttValue       ::=      '"' ([^<&"] | Reference)* '"'
                     |  "'" ([^<&'] | Reference)* "'"

答案 2 :(得分:2)

http://www.w3.org/TR/xml/#NT-AttValue是您正在寻找的产品,实质上它表示属性值可能包含任何字符,除了小于,&符号(有效字符或实体引用的部分除外)或引用值周围使用的字符(单引号属性可以包含双引号,双引号属性可以包含单引号但反之亦然)。

正如Tomalak所述,换行符允许的,但解析器不会将它们报告为换行符。