Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#从xml文件中删除所有空元素?_C#_Xml - Fatal编程技术网

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

如何使用C#从xml文件中删除所有空元素?,c#,xml,C#,Xml,如何使用C#从XML文件中删除所有空元素 例如: 输入 某个名字 某条街 某市 某个名字 输出 <Person> <PersonDetails> <Name>Some Name</Name> <Address> <Street>Some Street</Street> <City>Some City</City> </Addre

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

例如:

输入


某个名字
某条街
某市
某个名字
输出

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

某个名字
某条街
某市
某个名字

根据您更新的问题,您只需使用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,可以使用
子体()
和LINQ:

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

在这两种情况下,都需要使用
ToList()
,以确保您没有修改现有的可枚举项。

根据您更新的问题,您只需使用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,可以使用
子体()
和LINQ:

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

这两种情况下都需要使用
ToList()
,以确保您没有修改可枚举项。

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击“代码示例”按钮(
{}
)在编辑器工具栏上很好地格式化和语法突出显示它!不需要“破坏”您的XML,也不需要大量的

标记-只需格式化它@马克:酷,我从没注意到。我总是额外键入四个空格,或者在发布之前在VS2010中缩进我的代码。是否要从内到外递归删除空元素?例如,如果Persondeail中的所有元素都为空,是否还要删除Persondeail元素?欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击“代码示例”按钮(
{}
)在编辑器工具栏上很好地格式化和语法突出显示它!不需要“破坏”您的XML,也不需要大量的

标记-只需格式化它@马克:酷,我从没注意到。我总是额外键入四个空格,或者在发布之前在VS2010中缩进我的代码。是否要从内到外递归删除空元素?例如,如果PersonDetail中的所有元素都为空,是否还要删除PersonDetail元素?谢谢,这一个很有效。但它不会删除元素(层次结构)中的空元素。在我的案例中,我将获得具有不同结构的不同xml文件。对于任何类型的XML结构,是否有任何方法可以从中删除空元素?您可以通过创建一个方法(例如IsElementEmpty())来非常轻松地调整这个答案,该方法递归所有子元素,直到它为1。子元素或2已用完。找到一个值为的。@user1432798我已经更新了答案,可以满足您的要求。谢谢,这个很有用。但它不会删除元素(层次结构)中的空元素。在我的案例中,我将获得具有不同结构的不同xml文件。对于任何类型的XML结构,是否有任何方法可以从中删除空元素?您可以通过创建一个方法(例如IsElementEmpty())来非常轻松地调整这个答案,该方法递归所有子元素,直到它为1。子元素或2已用完。找到一个值为的。@user1432798我已经更新了答案,可以满足您的要求。