检查XElement是否包含特定的子节点

本文关键字:子节点 包含特 XElement 是否 检查 | 更新日期: 2023-09-27 18:14:30

也许我做错了,但是我有一个XElement来存储像这样的XML对象

<call>
   <attempted/>
   <completed>
        <welcomecall/>
    </completed>
</call>

数据类型为XElement,存储在调用类对象call.callinformation中。

如何解析属性内容(上面的xml)并查看completed是否包含子节点welcomecall(并非每个节点都包含)?

我试过call.callinformation.Element("completed").Element("welcomecall"),和其他变化,但没有运气。

我试图将其分配给布尔值,如hasWelcomeCall = (code to determine if completed has this child element)

检查XElement是否包含特定的子节点

如果您不介意它是否在completed元素中,您可以使用:

var hasWelcomeCall = call.Descendants("welcomecall").Any();

如果它可以在completed元素中的任何一个,但你想检查它是在completed而不是attempted,你可以使用:

var hasWelcomeCall = call.Elements("completed").Elements("welcomecall").Any();

如果你正在使用c# 6并且只有一个completed元素,你可以使用:

var hasWelcomeCall = call.Element("completed")?.Element("welcomecall") != null;

我相信您可以通过XPath做到这一点。

XElement call = XElement.Load("your xml");
XElement welcomeCall = call.XPathSelectElement("descendant::welcomecall");
bool hasWelcomeCall = welcomeCall != null;

关于XPathSelectElement的更多信息请点击这里