从SelectSingleNode获取具有属性的节点

时间:2010-05-26 21:58:10

标签: c# xml

我是n00b,但最近我一直在玩解析一些XML数据。我实际上在这个网站上发现了一个很好的功能,我可以通过以下方式访问具有特定属性的特定节点:docFoo.SelectSingleNode(“foo / bar / baz [@ name ='qux']);但是,数据看起来像这样:

<saving-throws>
    <saving-throw>
        <name>Fortitude</name>
        <abbr>Fort</abbr>
        <ability>Con</ability>
        <modifiers>
            <modifier name="base" value="2"/>
            <modifier name="ability" value="5"/>
            <modifier name="magic" value="0"/>
            <modifier name="feat" value="0"/>
            <modifier name="race" value="0"/>
            <modifier name="familar" value="0"/>
            <modifier name="feature" value="0"/>
            <modifier name="user" value="0"/>
            <modifier name="misc" value="0"/>
        </modifiers>
    </saving-throw>
    <saving-throw>
        <name>Reflex</name>
        <abbr>Ref</abbr>
        <ability>Dex</ability>
        <modifiers>
            <modifier name="base" value="6"/>
            <modifier name="ability" value="1"/>
            <modifier name="magic" value="0"/>
            <modifier name="feat" value="0"/>
            <modifier name="race" value="0"/>
            <modifier name="familar" value="0"/>
            <modifier name="feature" value="0"/>
            <modifier name="user" value="0"/>
            <modifier name="misc" value="0"/>
        </modifiers>
    </saving-throw>

我希望能够获得名称为base的节点,但是对于每个节点抛出节点,其中childnode“abbr”= xx。我可以在一个SelectSingleNode中以某种方式做到这一点,或者我将不得不停止豁免检定并遍历树的其余部分?

2 个答案:

答案 0 :(得分:7)

这应该可以满足您的需求:

SelectSingleNode("/saving-throws/saving-throw[abbr = 'Fort']/modifiers/modifier[@name='base']");

答案 1 :(得分:2)

试试这个,这将为您提供修饰符标记 save-throw 祖先的孩子 abbr 标记为“Fort”

//saving-throw/modifiers/modifier[@name='base' and ../../abbr = "Fort"]