如何在XML属性中保存换行符?

Tom*_*mmy 56 xml xslt newline

我需要保存包含某些XML属性中的换行符的内容,而不是文本.应该选择该方法,以便我能够在XSLT 1.0/ESXLT/XSLT 2.0中对其进行解码

什么是最好的编码方法?

请建议/提出一些想法.

Tom*_*lak 73

在兼容的DOM API中,您无需执行任何操作.只需将实际换行符保存到属性中,API就会自行对它们进行正确编码(参见Canonical XML规范,第5.2节).

如果你做你自己的编码(即替换\n
保存属性值之前),该API将编码您输入再次,导致
XML文件英寸

底线是,字符串值是逐字保存的.你得到你放入的东西,不需要干涉.

但是 ......某些实现不符合要求.例如,他们将&在属性值中编码字符,但忘记换行符或制表符.这会使您处于失败的位置,因为您不能
事先简单地替换换行符.

这些实现将保存未编码的换行符,如下所示:

<xml attribute="line 1
line 2" />
Run Code Online (Sandbox Code Playgroud)

在解析这样的文档时,属性中的文字换行符被标准化为单个空格(同样,根据规范) - 因此它们将丢失.

在这些实现中,不可能在属性中保存(并保留!)换行符.

  • @Joe:对不起,我没有给w3schools很多信誉.如果它符合规范,那将是另一回事. (5认同)
  • @Joe:你从哪里获取XML的信息使用Unix风格的换行符?据我所知,[规范](http://www.w3.org/TR/xml/)并不限制这一点. (3认同)
  • @Tomalak:嗯,好吧,那是公平的.在我查看它之前,我看到了效果.这是来自规范:http://www.w3.org/TR/xml/#sec-line-ends - 引用"为了简化应用程序的任务,XML处理器必须表现得像它规范化所有换行符一样在解析之前,在输入上的外部解析实体(包括文档实体)中,通过将双字符序列#xD #xA和任何未跟随#xA的#xD转换为单个#xA字符. (3认同)
  • 使用[NewLineHandling属性]可以使.NET Framework的XmlWriter正确且(合理地)合理地运行(https://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling(v = vs) .110).aspx)(通过设置为Entitize).遗憾的是,在Firefox中实现的XML DOM中不可能保留换行符 - [2002年的一个bug](https://bugzilla.mozilla.org/show_bug.cgi?id=169521) - 而Chrome的实现是正确的. (2认同)

Asa*_*aph 41

您可以使用实体&#10;来表示XML属性中的换行符.&#13;可用于表示回车.Windows风格的CRLF可以表示为&#13;&#10;.

这是合法的XML语法.有关详细信息,请参阅XML规范.