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

时间:2012-06-17 09:45:47

标签: c# xml

如何使用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>

1 个答案:

答案 0 :(得分: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()都是必要的,以确保您不会修改可枚举的数据。