我有一个最大3级深度的xml。现在通过使用C#或Xpath检查父节点下的所有子节点是否为空的最佳方法。
先谢谢。
答案 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解决方案可能更适合。