是否允许XML属性值中的换行符?

是否允许XML属性值中的换行符?

问题描述:

我意识到它不是优雅或想要的,但它允许(在格式良好的XML中)XML元素中的属性值跨越多行?是否允许XML属性值中的换行符?

例如

<some-xml-element value="this value goes over.... 
multiple lines!" /> 

是的,我意识到有更好的写作方式。我会亲自写,如:

<some-xml-element> 
<value>this value goes over... 
multiple lines!</value> 
</some-xml-element> 

或:

<some-xml-element value="this value goes over....&#13;&#10;" /> 

但是我们有我们自己的XML解析器,我想知道的第一个例子是否允许格式良好的XML。

+0

的.NET的XDocument解析器接受这种预期,但属性值与空间,而不是换行返回,因为这将是文本你第二个例子。 (您的问题不是特定于.NET,但是我的示例数据是。我不知道这是否是通用标准或.NET功能的一部分。) – 2011-03-02 06:40:28

+1

参见http://*.com/q/2004386/55452 – 2013-01-03 15:04:55

http://www.w3.org/TR/REC-xml/#NT-AttValue

似乎说的一切,除了<&,和您的分隔符('")都OK。所以换行符也应该是。

是的第一个例子是有效的。

仅限.NET: 如果您不确定目标字符串是否为有效xml属性(并通过代码提供此属性的值),则始终可以使用SecurityElement.Escape函数来转义无效字符。

根据该功能的描述,唯一的无效字符:

<>&'"

,这意味着(我的前辈写的),新行应好。

但是,根据W3C的建议,您的XML解析器应该将所有空白字符标准化为空格(0x20) - 因此您示例的输出将有所不同(您应该在输出上为“&#13” ; &#10;“,但在第一种情况下只有空格)。

http://www.w3.org/TR/1998/REC-xml-19980210#AVNormalize