检查XML中空子节点的最佳方法?

时间:2008-10-17 01:03:26

标签: c# xml

我有一个最大3级深度的xml。现在通过使用C#或Xpath检查父节点下的所有子节点是否为空的最佳方法。

先谢谢。

2 个答案:

答案 0 :(得分:6)

给出样本文件:

<foo>
  <bar>
    <baz/>
    <baz>Hello, world!</baz>
    <baz><qux/></baz>
  </bar>
</foo>

此表达式告诉您foo/bar的哪些子元素包含任何子元素:

foo/bar/*[count(*)>0]

此表达式告诉您foo/bar的哪些子节点有任何子文本节点:

foo/bar/*[text()]

因此,要确保所有子项都为空(没有子元素或文本节点),请确保此表达式返回true:

not(foo/bar/*[count(*)>0 or text()])

答案 1 :(得分:0)

这个LINQ to XML查询应该接近你的目标:


XElement xml = new XElement("contacts",
  new XElement("contact",
    new XAttribute("contactId", ""),
    new XElement("firstName", ""),
    new XElement("lastName", ""),
    new XElement("Address",
        new XElement("Street", ""))
    ),

new XElement("contact", new XAttribute("contactId", ""), new XElement("firstName", ""), new XElement("lastName", "") ) );

var query = from c in xml.Elements() where c.Value != "" select c;

Console.WriteLine(xml); Console.WriteLine(query.Count());

当查询计数== 0时,您没有包含内容的元素。

根据您所使用的内容以及LINQ样式操作没有其他用途,发布的xPath解决方案可能更适合。