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

发布于 2024-10-31 20:22:36 字数 1378 浏览 1 评论 0原文

我正在使用 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 中的
之前添加空格或任何其他文本,

<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 属性时,就会出现问题text-run XElement 以获取元素的文本值。我不会收到原始 xml 的正确输出,而是收到

\n \n

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

I am using XLinq (XML to Linq) to parse a xml document and one part of the document deals with representing rich-text and uses the xml:space="preserve" attribute to preserve whitespace within the rich-text element.

The issue I'm experiencing is that when I have a element inside the rich-text which only contains a sub-element but no text, XLinq reformats the xml and puts the element on its own line. This, of course, causes additional white space to be created which changes the original content.

Example:

<rich-text xml:space="preserve">
    <text-run><br/></text-run>
</rich-text>

results in:

<rich-text xml:space="preserve">
    <text-run>
        <br/>
    </text-run>
</rich-text>

If I add a space or any other text before the <br/> in the original xml like so

<rich-text xml:space="preserve">
    <text-run> <br/></text-run>
</rich-text>

the parser doesn't reformat the xml

<rich-text xml:space="preserve">
    <text-run> <br/></text-run>
</rich-text>

How can I prevent the xml parser from reformatting my element?

Is this reformatting normal for XML parsing or is this just an unwanted side effect of the XLinq parser?

EDIT:
I am parsing the document like this:

using (var reader = System.Xml.XmlReader.Create(stream))
    return XElement.Load(reader);

I am not using any custom XmlReaderSettings or LoadOptions

The problem occurs when I use the .Value property on the text-run XElement to get the text value of the element. Instead of receiving \n which would be the correct output from the original xml, I will receive

\n \n

Note the additional whitespace and line break due to the reformatting! The reformatting can also be observed when inspecting the element in the debugger or calling .ToString().

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枕头说它不想醒 2024-11-07 20:22:36

您是否尝试过此操作:

yourXElement.ToString(SaveOptions.DisableFormatting)

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

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

XElement.Parse(sr, LoadOptions.PreserveWhitespace);

Have you tried this:

yourXElement.ToString(SaveOptions.DisableFormatting)

This should solve your problem.

btw - you should also do a similar thing on load:

XElement.Parse(sr, LoadOptions.PreserveWhitespace);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文