使用XPath递归地选择子节点
本文关键字:选择 子节点 递归 XPath 使用 | 更新日期: 2023-09-27 18:15:33
给定以下XML:
<Checks>
<IsSomethingCheck Param="1"/>
<IsSomeoneCheck Param2="2"/>
<Checks Operator="Or">
<IsAnythingCheck Param3="3"/>
</Checks>
</Checks>
如何递归遍历Checks
元素的子元素?
下面的代码适用于最外层的子元素,但停止处理最内部的子元素(Checks
内部元素的一部分)
protected override void InitializePlugin(XmlElement xmlElement)
{
Enum.TryParse(xmlElement.GetAttribute("Operator"), out _operator);
XPathNodeIterator nav = xmlElement.CreateNavigator().Select("Checks/*");
foreach (XPathNavigator checkNode in nav)
{
if (_checksLookup.ContainsKey(checkNode.Name))
{
Type checkType = _checksLookup[checkNode.Name];
Check check = Activator.CreateInstance(checkType) as Check;
check.Initialize(checkNode.OuterXml);
Checks.Add(check);
}
}
}
PS:此方法的XmlElement期望它将接收XML的整个Checks
部分
找到了!XPath表达式应该是/CheckManager/*
,而不是CheckManager/*
。