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

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

什么是最好的编码方法?

请build议/提供一些想法。

在一个兼容的DOM API中,你不需要做任何事情。 只需将实际换行符保存到属性中,API将自行正确编码它们(请参阅Canonical XML规范,第5.2节 )。

如果你做自己的编码(即在保存属性值之前用
replace\n ),那么API将再次编码你的input,导致
 在XML文件中。

底线是,string值是逐字保存的。 你拿出你放的东西,不需要干涉。

但是 …有些实现不符合。 例如,他们将在属性值中编码&字符,但忘记换行符或制表符。 这使你处于一个失败的位置,因为你不能简单地用
replace换行符
 预先。

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

 <xml attribute="line 1 line 2" /> 

在parsing这样一个文档时,属性中的文字换行被标准化为一个空格(同样符合规范) – 因此它们丢失了。

在这些实现中保存(并保留!)属性中的换行是不可能的。

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

这是合法的XML语法。 有关更多细节,请参阅XML规范 。

一个粗略的答案可以是:

 XmlDocument xDoc = new XmlDocument(); xDoc.Load(@"Agenda.xml"); //make stuff with the xml //make attributes value = "\r\n" (you need both expressions to make a new line) string a = xDoc.InnerXml.Replace("&#xD;", "\r").Replace("&#xA;", "\n").Replace("><",">\r \n<"); StreamWriter sDoc = new StreamWriter(@"Agenda.xml"); sDoc.Write(a); sDoc.Flush(); sDoc.Dispose(); 

这将如你所见只是一个string