XPath:具有具有属性的子节点的节点

时间:2010-05-18 01:05:59

标签: .net xpath

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']]")

2 个答案:

答案 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引擎效果不佳)对整个子树(甚至文档)的广泛遍历进行评估。