【发布时间】:2011-10-08 06:42:08
【问题描述】:
我正在使用 XLinq(XML 到 Linq)来解析 xml 文档,文档的一部分处理表示富文本并使用 xml:space="preserve" 属性在富文本元素中保留空白。
我遇到的问题是,当我在富文本中有一个仅包含子元素但没有文本的元素时,XLinq 会重新格式化 xml 并将该元素放在自己的行上。当然,这会导致创建额外的空白区域,从而改变原始内容。
例子:
<rich-text xml:space="preserve">
<text-run><br/></text-run>
</rich-text>
结果:
<rich-text xml:space="preserve">
<text-run>
<br/>
</text-run>
</rich-text>
如果我在原始 xml 中的 <br/> 之前添加空格或任何其他文本,就像这样
<rich-text xml:space="preserve">
<text-run> <br/></text-run>
</rich-text>
解析器不会重新格式化 xml
<rich-text xml:space="preserve">
<text-run> <br/></text-run>
</rich-text>
如何防止 xml 解析器重新格式化我的元素?
这种重新格式化对于 XML 解析是正常的,还是只是 Xlinq 解析器的不良副作用?
编辑: 我正在解析这样的文档:
using (var reader = System.Xml.XmlReader.Create(stream))
return XElement.Load(reader);
我没有使用任何自定义 XmlReaderSettings 或 LoadOptions
当我在文本运行XElement 上使用.Value 属性来获取元素的文本值时,就会出现问题。而不是收到\n,这将是原始xml的正确输出,我将收到
\n \n
请注意由于重新格式化而导致的额外空格和换行符!在调试器中检查元素或调用.ToString() 时也可以观察到重新格式化。
【问题讨论】:
-
您在哪里观察到这种重新格式化?请显示更多有关您正在使用此 XElement 做什么的代码。
-
添加一些搜索关键字:
XElement.Parse添加空格、缩进、制表符。
标签: c# xml linq-to-xml