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

Are line breaks in XML attribute values allowed?

提问人:CodeAndCats 提问时间:1/16/2009 最后编辑:LarsHCodeAndCats 更新时间:9/12/2015 访问量:69911

问:

我意识到它既不优雅也不理想,但是是否允许(在格式正确的 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中使用。

xml 解析

评论

1赞 Mark Hurd 3/2/2011
.NET XDocument 分析器按预期接受此值,但属性值与空格一起返回,而不是换行符,因为它在文本<值>中,如第二个示例所示。(您的问题并非特定于 .NET,但我的示例数据是。我不知道这是通用标准的一部分还是 .NET 功能的一部分。
1赞 David J. Liszewski 1/3/2013
另请参阅 stackoverflow.com/q/2004386/55452
0赞 n611x007 4/22/2015
为保留换行符的类似问题举了一个例子:stackoverflow.com/a/29782321/611007
0赞 n611x007 4/22/2015
相关新闻: stackoverflow.com/questions/260436 - 相关新闻: stackoverflow.com/questions/2004386 - 相关新闻: stackoverflow.com/questions/1289524

答:

2赞 Reji 1/16/2009 #1

是的,第一个示例是有效的。

110赞 derobert 1/16/2009 #2

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

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

评论

6赞 stivlo 7/13/2011
在属性中换行是一个好主意的一个例子是 Spring 配置中的 xsi:schemaLocation 属性,它可以包含多个由空格分隔的 URL,因此比屏幕宽度长得多。
3赞 n611x007 4/22/2015
它是有效的,但是解析器会将它们规范化为空间,正如 Jan Cetkovsky 所说
0赞 Nullius 3/17/2016
井。。。我在 XSLT 文档中使用多行长 if/when 测试语句。
4赞 Łukasz Wiatrak 11/15/2011 #3

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

根据此函数的描述,唯一无效的字符是:

<, , , ,>&'"

这意味着(正如我的前任所写的),这条新线应该是可以的。

55赞 Jan Cetkovsky 11/19/2011 #4

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

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