根据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>
有关嵌套的空元素带属性被移除的任何想法吗?