如何使XDocument在XmlDocument等属性中保留新行?

时间:2014-12-18 09:51:57

标签: xml xml-parsing linq-to-xml xmldocument

我非常轻松和舒适地使用XDocument和LINQ,但是 出现了一个问题:

当您尝试输出xml时,

XDocument 删除属性内的新行
另一方面,XmlDocument 保留新行

static void Main(string[] args)
{
    string res;
    string str = "<element attrib='Some text \n with new line'/>";

    XDocument xDoc = XDocument.Parse(str);
    res = xDoc.ToString();
    //res dose not containe the new line.

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(str);
    res = xmlDoc.OuterXml;
    //res contains a new line char, that i can replace to something more nice like /r.
    res = res.Replace("&#xA;", Environment.NewLine);
}

我已经使用XDocument编写了很多代码,并且不想使用XmlDocument重写它。如何让XDocument以这种方式表现得像XmlDocument?

1 个答案:

答案 0 :(得分:0)

根据XML规范,解析文档时属性值为normalized。规范化将使用空白字符(#x20)替换属性值中的所有换行符。请注意,这种规范化在您创建XDocument时已经发生,而不是在您将其写回文件时发生,并且它完全符合XML规范。

如果您想保留换行符,可以在输入中将换行符编码为&#xA;

var inputXml = "<element attrib='Some text &#xA; with new line'/>";
var xDoc = XDocument.Parse(inputXml);
var attribValue = (string)xDoc.Root.Attribute("attrib");