che*_*ica 6 .net xml linq-to-xml xml-attribute c#-4.0
根据这个问题:
XML属性中的换行符完全有效(尽管可能不推荐):
<xmltag1>
<xmltag2 attrib="line 1
line 2
line 3">
</xmltag2>
</xmltag1>
Run Code Online (Sandbox Code Playgroud)
当我使用LINQ to XML(System.Xml.Linq)解析这样的XML时,这些换行符将以静默方式转换为空格' '字符.
有没有办法告诉XDocument.Load()解析器保留这些换行符?
PS:我正在解析的XML是由第三方软件编写的,因此我无法改变换行符的写入方式.
如果你想要保留属性值中的换行符,那么你需要用字符引用来编写它们,例如
<foo bar="Line 1. Line 2. Line3."/>
Run Code Online (Sandbox Code Playgroud)
另外,根据XML规范http://www.w3.org/TR/xml/#AVNormalize,XML解析器会将它们规范化为空格.
[edit]如果要避免属性值规范化,那么使用旧版加载XML XmlTextReader有助于:
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);
Run Code Online (Sandbox Code Playgroud)
那输出
|Line 1.
Line 2.
Line 3.|
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |