gpt4 book ai didi

c# - 使用 C# 从 XML 中删除没有属性的空元素?

转载 作者:数据小太阳 更新时间:2023-10-29 02:29:43 28 4
gpt4 key购买 nike

根据之前在 StackOverflow 上的回答,我使用以下语句删除所有空元素(具有属性的元素除外):

XDocument xdoc = XDocument.Parse(xmlString);

xdoc.Descendants()
.Where(e => !e.HasAttributes && (e.IsEmpty || String.IsNullOrWhiteSpace(e.Value)))
.Remove();

针对以下 XML 运行时:

<MESSAGE>
<RELATIONSHIPS1>
<RELATIONSHIP1 from="10017" to="1"/>
</RELATIONSHIPS1>
<RELATIONSHIPS2>
<RELATIONSHIP2 from="10017" to="1"></RELATIONSHIP2>
</RELATIONSHIPS2>
<RELATIONSHIPS3>
<RELATIONSHIP3 from="10017" to="1">test</RELATIONSHIP3>
</RELATIONSHIPS3>
<RELATIONSHIPS4 attr="test">
<RELATIONSHIP4 from="10017" to="1"></RELATIONSHIP4>
</RELATIONSHIPS4>
<EXTENSION a1="1" a2="2"/>
<FLOOD>
<FLOOD_RESPONSE>
<PROPERTY>
<PROPERTY_DETAIL/>
<PROPERTY_DETAIL></PROPERTY_DETAIL>
</PROPERTY>
</FLOOD_RESPONSE>
</FLOOD>
</MESSAGE>

我期待的是:

<MESSAGE>
<RELATIONSHIPS1>
<RELATIONSHIP1 from="10017" to="1"/>
</RELATIONSHIPS1>
<RELATIONSHIPS2>
<RELATIONSHIP2 from="10017" to="1"></RELATIONSHIP2>
</RELATIONSHIPS2>
<RELATIONSHIPS3>
<RELATIONSHIP3 from="10017" to="1">test</RELATIONSHIP3>
</RELATIONSHIPS3>
<RELATIONSHIPS4 attr="test">
<RELATIONSHIP4 from="10017" to="1"></RELATIONSHIP4>
</RELATIONSHIPS4>
<EXTENSION a1="1" a2="2" />
</MESSAGE>

但收到以下内容:

<MESSAGE>
<RELATIONSHIPS3>
<RELATIONSHIP3 from="10017" to="1">test</RELATIONSHIP3>
</RELATIONSHIPS3>
<RELATIONSHIPS4 attr="test">
<RELATIONSHIP4 from="10017" to="1"></RELATIONSHIP4>
</RELATIONSHIPS4>
<EXTENSION a1="1" a2="2" />
</MESSAGE>

有没有关于带属性的嵌套空元素的想法被删除了?

最佳答案

检查 XElement.Value on MSDN 的描述:

Gets or sets the concatenated text contents of this element.

这意味着只返回内部元素的值(只返回元素,不返回属性)。因此,例如在您的 XML 中,您有这个元素:

<RELATIONSHIPS1>
<RELATIONSHIP1 from="10017" to="1"/>
</RELATIONSHIPS1>

该元素的e.Value为空串,所以该元素被移除。

您可以运行此类查询来删除不需要的元素。基本上您需要检查具有空值且没有任何属性的元素,并且它的所有后代都具有空值且没有属性:

xdoc.Descendants()
.Where(e => !e.HasAttributes &&
string.IsNullOrEmpty(e.Value) &&
e.Descendants().All(f=>String.IsNullOrEmpty(f.Value) && !f.HasAttributes))
.Remove();

关于c# - 使用 C# 从 XML 中删除没有属性的空元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29498014/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com