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

use*_*798 1 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>
Run Code Online (Sandbox Code Playgroud)

产量

<Person>
  <PersonDetails>
    <Name>Some Name</Name>
    <Address>
      <Street>Some Street</Street>
      <City>Some City</City>
    </Address>
 </PersonDetails>
 <PersonDetails>
    <Name>Some Name</Name>
 </PersonDetails>
</Person>
Run Code Online (Sandbox Code Playgroud)

yam*_*men 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
Run Code Online (Sandbox Code Playgroud)

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

doc.Descendants().ToList().Where(d => d.Value.Length == 0).Remove();
Run Code Online (Sandbox Code Playgroud)

ToList()这两种情况下是必要的,以确保您不到位修改枚举.