如何使用c#删除Xml中的空值子节点

时间:2016-10-17 07:29:12

标签: c# .net xml

我有一个包含父节点和子节点的XML Documnet,

<?xml version='1.0' encoding='UTF-8'?> 
<response>   
   <system_timestamp>2016-10-21 13:40:28</system_timestamp>
   <response_data>   
    <status>Active</status>   
    <profile>     
     <first_name>John</first_name>
     <last_name>Abraham</last_name>
     <ship_to_address>        
      <address_1>null</address_1>      
      <address_2>null</address_2>  
      <city>null</city>      
      <state>null</state>   
      <postal_code>null</postal_code> 
     </ship_to_address>  
    </profile>
  </response_data>  
</response>

我有几个空值子节点,如<address_1><address_2>。那么,现在我将如何删除子节点的空值。我试过了

doc.Descendants().Where(e => string.IsNullOrEmpty(e.Value)).Remove();

但这不起作用。我正在使用这个      XmlDocument doc = new XmlDocument(); doc.LoadXml(_value);

解析xml文档的代码。我们是否有任何其他方法可以使用XMLDocument而不是XElement来删除。

2 个答案:

答案 0 :(得分:6)

e.Value不是空引用或空字符串 - 它是字符串"null",因为它是元素中的值。

你想:

doc.Descendants().Where(e => (string) e == "null").Remove();

答案 1 :(得分:0)

从列表中删除项目时,必须从最后一项删除到第一项,否则索引会搞砸,并且不会删除所有项目。试试这个

sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            List<XElement> nulls = doc.Descendants().Where(x => (string)x == "null").ToList();
            for (int i = nulls.Count - 1; i >= 0; i--)
            {
                nulls[i].Remove();
            }
        }
    }
}