XML Fragment
<component name='Stipulations'>
<group name='NoStipulations' required='N'>
<field name='StipulationType' required='N' />
<field name='StipulationValue' required='N' />
</group>
</component>
<component name='NestedParties3'>
<group name='NoNested3PartyIDs' required='N'>
<field name='Nested3PartyID' required='N' />
<field name='Nested3PartyIDSource' required='N' />
<field name='Nested3PartyRole' required='N' />
<group name='NoNested3PartySubIDs' required='N'>
<field name='Nested3PartySubID' required='N' />
<field name='Nested3PartySubIDType' required='N' />
</group>
</group>
</component>
<component name='UnderlyingStipulations'>
<group name='NoUnderlyingStips' required='N'>
<field name='UnderlyingStipType' required='N' />
<field name='UnderlyingStipValue' required='N' />
</group>
</component>
我想要的是所有“group”节点,它们的子节点类型为“field”,名称为“StipulationType”。
这是我到目前为止所尝试的:
dictionary.XPathSelectElements("group[field[@name='StipulationType']]")
dictionary.XPathSelectElements("group[./field[@name='StipulationType']]")
答案 0 :(得分:2)
看起来不错。您可能需要根据实施情况对XPath进行更具体的说明:
//group[field[@name='StipulationType']]
或
/component/group[field[@name='StipulationType']]
应该有效
答案 1 :(得分:1)
问题:
dictionary.XPathSelectElements("group[field[@name='StipulationType']]")
这将选择满足谓词的所有组元素,它们是当前节点的子项。
但是,您希望所有组元素(满足谓词) - 从XML片段中可以清楚地看到并非所有组元素都具有相同的父元素。
解决方案:
评估来自祖父母的XPath表达式(基于提供的片段!):
一个例子是:
component/group[field[@name='StipulationType']]
根据完整文档的结构(未提供),可能需要更多位置步骤。
应避免的事项:
避免使用//
缩写,因为它可能会导致(优化XPath引擎效果不佳)对整个子树(甚至文档)的广泛遍历进行评估。