我有一个XML文件。我想删除没有任何后代的line_item
个节点。
<root>
<transaction>
<type>regular</type>
<number>746576</number>
<customer>
<mobile>5771070</mobile>
<email />
<name>abcd</name>
</customer>
<line_items>
<line_item>
<serial>8538</serial>
<amount>220</amount>
<description>Veggie </description>
<qty>1</qty>
<attributes />
</line_item>
<line_item />
<line_item />
<line_item />
<line_item />
<line_item>
<serial>8543</serial>
<description>Tax</description>
<qty>1</qty>
<value>42.78</value>
<attributes />
</line_item>
</line_items>
<associate_details>
<code>660</code>
<name>xyz</name>
</associate_details>
</transaction>
</root>
我正在使用ASP.NET 4.现在我找到line_item
节点并检查它是否有元素。
答案 0 :(得分:1)
刚刚复制了Alex Filipovici的答案,稍作修改:
var xDoc = XDocument.Load("input.xml");
xDoc.Descendants()
.Where(d => d.Name.LocalName == "line_item" && !d.HasElements)
.ToList()
.ForEach(e => e.Remove());
答案 1 :(得分:0)
试试这个:
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
var xDoc = XDocument.Load("input.xml");
xDoc.Descendants()
.Where(d =>
d.Name.LocalName == "line_item" &&
d.Elements().Count() == 0)
.ToList()
.ForEach(e => e.Remove());
// TODO:
//xDoc.Save(savePath);
}
}
更短(更快)的替代方法是使用以下语法:
xDoc.Descendants("line_item")
.Where(d => !d.HasElements)
.ToList()
.ForEach(e => e.Remove());