.net – LINQ to XML忽略属性中的换行符

根据这个问题:

Are line breaks in XML attribute values allowed?

XML属性中的换行符完全有效(尽管可能不推荐):

<xmltag1>
    <xmltag2 attrib="line 1
line 2
line 3">
    </xmltag2>
</xmltag1>

当我使用LINQ to XML(System.Xml.Linq)解析这样的XML时,这些换行符将被静默转换为空格”字符.

有没有办法告诉XDocument.Load()解析器保留这些换行符?

P.S.:我正在解析的XML是由第三方软件编写的,因此我无法改变换行符的写入方式.

如果你想要保留属性值中的换行符,那么你需要用字符引用来写它们,例如

<foo bar="Line 1.&#10;Line 2.&#10;Line3."/>

另外,根据XML规范http://www.w3.org/TR/xml/#AVNormalize,XML解析器将它们规范化为空格.

[edit]如果要避免属性值规范化,那么使用旧版XmlTextReader加载XML有助于:

string testXml = @"<foo bar=""Line 1.
Line 2.
Line 3.""/>";

            XDocument test;
            using (XmlTextReader xtr = new XmlTextReader(new StringReader(testXml)))
            {
                xtr.Normalization = false;
                test = XDocument.Load(xtr);
            }
            Console.WriteLine("|{0}|", test.Root.Attribute("bar").Value);

那输出

|Line 1.
Line 2.
Line 3.|
本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院