【发布时间】:2015-04-07 17:55:40
【问题描述】:
根据 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>
关于带有属性的嵌套空元素的任何想法正在被删除?
【问题讨论】:
-
你需要递归,我认为你不能通过 LINQ 进行递归。所以你需要编写一个单独的递归函数。见stackoverflow.com/questions/4814242和stackoverflow.com/questions/20974248和stackoverflow.com/questions/21262391