我有一个包含父节点和子节点的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来删除。
答案 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();
}
}
}
}