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

本文关键字:我的 XML 格式化 XLinq 为什么 | 更新日期: 2023-09-27 17:49:55

我使用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

当我在文本运行XElement上使用.Value属性以获取元素的文本值时,就会出现问题。而不是接收'n,这将是原始xml的正确输出,我将收到

'n 'n

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

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

你试过了吗:

yourXElement.ToString(SaveOptions.DisableFormatting)

这会解决你的问题。

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

XElement.Parse(sr, LoadOptions.PreserveWhitespace);