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

时间:2015-09-24 19:12:55

标签: c# xml

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

如果您不介意它是否在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;

答案 1 :(得分:0)

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

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

有关XPathSelectElement here的更多信息。