1

如何使用 C# 从 XML 文件中删除所有空元素?

例如:

输入

<Person>
  <PersonDetails>
    <Name>Some Name</Name>
    <Address>
      <Street>Some Street</Street>
      <City>Some City</City>
      <Zip/>
    </Address>
 </PersonDetails>
 <PersonDetails>
    <Name>Some Name</Name>
    <Address/>
 </PersonDetails>
 <PersonDetails/>
</Person>

输出

<Person>
  <PersonDetails>
    <Name>Some Name</Name>
    <Address>
      <Street>Some Street</Street>
      <City>Some City</City>
    </Address>
 </PersonDetails>
 <PersonDetails>
    <Name>Some Name</Name>
 </PersonDetails>
</Person>
4

1 回答 1

7

根据您更新的问题,您可以使用 XPath one-liner 来获得您所追求的:

var doc = XElement.Parse(source);  // or XElement.Load(filename) if coming from a file   

doc.XPathSelectElements("//*[string-length() = 0]").ToList().Remove();

doc.Save(filename)                 // or doc.ToString() if you want the string output

如果您不想使用 XPath,可以使用Descendants()和 LINQ:

doc.Descendants().ToList().Where(d => d.Value.Length == 0).Remove();

在这ToList()两种情况下都是必要的,以确保您没有就地修改可枚举。

于 2012-06-17T09:53:14.127 回答