【问题标题】:why is XLinq reformatting my XML?为什么 Xlinq 重新格式化我的 XML?
【发布时间】: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 中的 &lt;br/&gt; 之前添加空格或任何其他文本,就像这样

<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() 时也可以观察到重新格式化。

【问题讨论】:

  • 您在哪里观察到这种重新格式化?请显示更多有关您正在使用此 XElement 做什么的代码。
  • 添加一些搜索关键字:XElement.Parse 添加空格、缩进、制表符。

标签: c# xml linq-to-xml


【解决方案1】:

你试过了吗:

yourXElement.ToString(SaveOptions.DisableFormatting)

这应该可以解决您的问题。

顺便说一句 - 你也应该在加载时做类似的事情:

XElement.Parse(sr, LoadOptions.PreserveWhitespace);

【讨论】:

  • 谢谢,但这无济于事。我已经通过 xml:space="preserve" 属性指示它保留空格。问题不在于它没有保留空间,而是它重新格式化了原始 xml 并通过这样做引入了额外的空白。不幸的是,SaveOptions.DisableFormatting 也无济于事。
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2016-06-24
  • 2011-02-10
  • 1970-01-01
相关资源
最近更新 更多