XML属性值是否允许换行?


91

我意识到这不是很优雅或不理想,但是(在格式良好的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是否允许第一个示例。


1
.NET XDocument解析器按预期接受此设置,但是属性值返回的是空格,而不是换行符,就像您在第二个示例中在文本<value>中那样。(您的问题并非特定于.NET,但我的示例数据是。我不知道这是否是通用标准或.NET功能的一部分。)
Mark Hurd


举了一个类似的例子,该例子保留了换行符:stackoverflow.com/a/29782321/611007
n611x007

Answers:


101

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

似乎说除<&和分隔符('")之外的所有内容都可以。因此,换行符也应该如此。


6
在属性配置中最好使用换行符的示例是Spring配置中的xsi:schemaLocation属性,该属性可以包含多个用空格分隔的URL,因此比屏幕宽度长得多。
stivlo

3
这是有效的,但是解析器会将它们归一化为空间,如Jan Cetkovsky所说
n611x007

好吧……我在XSLT文档中的测试语句中使用多行。
Nullius


3

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

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

<>&'"

这意味着(正如我的前任所写的那样),新行应该可以。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.