【问题标题】:Are line breaks in XML attribute values allowed?XML 属性值中是否允许换行?
【发布时间】:2010-10-01 18:25:06
【问题描述】:

我意识到它并不优雅或不受欢迎,但它是否允许(在格式良好的 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 xml-parsing


【解决方案1】:

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

似乎除了&lt;&amp; 和您的分隔符('")之外的所有内容都可以。所以换行符也应该是。

【讨论】:

  • 在属性中换行是个好主意的一个例子是 Spring 配置中的 xsi:schemaLocation 属性,它可以包含多个用空格分隔的 URL,因此比屏幕宽度长得多。
  • 它是有效的,但是解析器会将它们标准化为空格,as Jan Cetkovsky says
  • 嗯...我在 XSLT 文档中使用多行长 if/when 测试语句。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    &lt;&gt;&amp;'"

    这意味着(正如我的前辈所写),新行应该没问题。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-19
        • 2013-01-15
        • 2010-09-12
        • 2018-09-15
        • 2011-04-29
        • 1970-01-01
        相关资源
        最近更新 更多