为什么XLinq重新格式化我的XML?

时间:2011-04-12 03:49:18

标签: c# xml linq-to-xml

我使用XLinq(XML to 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);

我没有使用任何自定义XmlReaderSettingsLoadOptions

当我在文本运行.Value上使用XElement属性来获取元素的文本值时,会出现问题。我将收到

,而不是接收原始xml中正确输出的\n

\n \n

请注意由于重新格式化而产生的额外空格和换行符!在检查调试器中的元素或调用.ToString()时,也可以观察到重新格式化。

1 个答案:

答案 0 :(得分:3)

你试过这个:

yourXElement.ToString(SaveOptions.DisableFormatting)

这可以解决您的问题。

btw - 你也应该在加载时做类似的事情:

XElement.Parse(sr, LoadOptions.PreserveWhitespace);