2013-11-04 154 views
0

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

  1. 是否与元素的文字内容相同?
  2. 或者它只是一个子集(不包括例如\ n)?

请引用规范中回答我的问题的部分。

+0

看看'Attribute'的产物,然后'AttValue',你应该有答案。 –

+0

相关问题:[XML属性值中的换行符是否有效?](http://stackoverflow.com/questions/449627/are-line-breaks-in-xml-attribute-values-valid) – poke

回答

3

XML属性允许char data(即CDATA)。 See

它们可以包含\n,它必须编码为
(或等效的,
)。通常,当您设置属性值时,XML API会为您执行此操作。

There are non-compliant APIs不属于属性值中的换行符。这些API使得不可能保留换行符,因为它们直接插入它们。

如果属性包含文字换行符,像这样:

<elem attr="a 
linebreak"> 

则该值是在分析阶段normalized,在该点,换行被转换成一个空间。

选项卡(&#x9;)发生的情况也是如此 - 它可能存在于属性值中,但必须进行编码或在解析时进行标准化。

为了完整起见:由于一个相当短视的决定(恕我直言),文字>字符允许在属性值(<不是,但是)。我建议不要这样做。无论如何,大多数API都会插入转义表格&gt;

+0

谢谢你的伟大回答。关于< and >角色 - 我相信你在那里有一个错字。根据规范,<禁止>是允许的。 –

+0

@Dušan当然,我错误地记得那一个。感谢指针,这是固定的。 – Tomalak

3

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

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

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

Tomalamala指出,允许换行符,但它们不会被解析器报告为换行符。

+0

换行符以编码形式进行报告。这是因为字符实体扩展发生在规范化之后。 – Tomalak

+1

@Tomalak我同意,但我认为这个问题是关于具体的语法而不是抽象的信息集。 –

+0

这是更多的“额外信息”类型的评论,而不是更正。 :) – Tomalak

相关问题