XML 回车符编码

51

我想在XML节点中表示回车符。
我尝试过保留空白、十六进制实体 和\n,但在浏览器中查看时都没有成功。

示例

<Quote>
Alas, poor Yorick!
I knew him
</Quote>
感谢。
3个回答

85

要在XML中插入回车符,您需要使用其字符实体&#13;

这是因为符合规范的XML解析器必须在解析之前将CRLF和任何未跟随LF的CR转换为单个LF。此行为在XML 1.0规范的行尾处理部分中进行了定义。


18
细节提示:CR 是 而不是 ,后者是 LF - 有关详细信息,请参阅此 ASCII 表格 ... http://www.asciitable.com/ ... - dodgy_coder
6
是的, 代表LF, 代表CR。Windows通常会有CRLF序列(也就是 ),Linux只有LF( )。 - Luke
4
哇塞,非常感谢你!因为这个问题,我的测试一直失败... :D - insan-e
1
@MikeF 这不是一个无效的字符实体吗,因为它不是十进制的吗?你确定你正在将其提供给XML解析器吗? - binki
通常来说,十六进制实体在#后面需要加上x,例如ASCII字符代码10的表示为&#xa;。如果没有加上x,使用Saxon解析器的OxygenXML会给出致命错误信息:"字符引用中的"&#"后必须紧跟着一个十进制表示。" - undefined
显示剩余2条评论

15

xml:space="preserve" 必须适用于所有符合标准的XML解析器。

但是请注意,在HTML中,换行只是空格,而不是一个真正的换行(在(X)HTML中使用<br />标记表示),这可能是您所遇到的问题。

您还可以添加&#10;和/或&#13;来插入回车和换行符。


1
记录一下,在PC上,序列通常是CR 后跟LF 但现在,单个LF通常就足够了。 - dodgy_coder
2
请注意,即使使用了 xml:space="preserve",XML解析器仍然需要在解析之前将 13 10(和其他序列)替换为 10。您可以输入一个CR,以便通过使用字符实体引用,例如 &#xD 来生存解析。 - binki
@binki,为什么你认为 xD == 13 是可以的,但 xA == 10 不可以呢? - MikeF
1
@MikeF 没有必要将 10/0xa 编码为字符实体。XML 可以作为文本复制/粘贴到不同的系统中。如果这样做,在某些系统上,换行符将是 CRLF,在其他系统上则是 LF 或其他字符。因此,XML 规范规定处理器应将不同类型的换行符规范化为 10/0xa,以确保作为文本传输的 XML 始终被解析为相同的确切值。因此,您只需要对非 10 字符进行实体化,包括 CR (U+13),CR,NEL (U+13 U+85) 和 W3C 链接中列出的其他字符。如果我误解了您的问题,请告诉我。 - binki

2

浏览器不能可靠地显示空格。我建议使用Linux的“od”命令来查看实际内容。符合XML标准的解析器将遵守您列出的所有方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接