如何通过XPath获取XML节点

时间:2014-06-24 14:20:19

标签: xml xpath linq-to-xml

我有一个XML:

<?xml version="1.0" encoding="utf-8" ?>
<Root>
    <Class>
        <Room>
            1
        </Room>
        <Subject>
            English
        </Subject>
    </Class>
    <Class>
        <Room>
            2
        </Room>
        <Subject>
            Maths
        </Subject>
    </Class>
</Root>

我使用它作为网格的数据源,我使用了xmldatasource和xpath。

PrimaryDataSource = new XmlDataSource();
PrimaryDataSource.EnableCaching = false;
PrimaryDataSource.Data = ClassXML;
return PrimaryDataSource;

并访问客户端的节点: XPath(&#34; Room&#34;)&amp;的XPath(&#34;主体&#34)

这给了我特定属性的值。

现在我想获得整个XML根表单客户端,只有一个Class根。

<Class>
    <Room>
        1
    </Room>
    <Subject>
        English
    </Subject>
</Class>

任何人都可以告诉我如何通过XPath或其他方法获得它。

3 个答案:

答案 0 :(得分:1)

如果你想要第一个&#34;类&#34;只需使用:

(//Class)[1]

答案 1 :(得分:1)

由于只有一个根,您也可以使用XPATH:

/Class

答案 2 :(得分:0)

您可以使用绝对XPath表达式选择所有类:

/Root/Class

后代轴表达式,如:

//Class

将选择一个包含所有类的节点集,独立于其嵌套(如果层次结构中有更多Class个元素,则在这种情况下也会选择它们。< / p>

使用位置谓词,如@ErezRobinson在答案中建议的那样,您可以根据他们在上下文中的位置选择类。括号将把它放在全局上下文中。 XPath表达式中的每个斜杠分隔步骤都提供了一个上下文,该上下文限制了后续步骤或后续谓词的范围。并且每个谓词通过过滤掉与其内部的布尔表达式不匹配的节点来减少节点集。 (//Class)[1](//Class)[position() = 1]

的快捷方式

您还可以选择与其子节点的值匹配的类与谓词。要选择具有值为Class子元素 Room的所有2元素,您可以使用:

//Class[Room = '2']

您也可以按主题选择:

//Class[Subject = 'Maths']

最后,一旦有了上下文,就可以选择该范围内的其他元素。例如,RoomSubject时,您可以获得English号码:

//Class[Subject = 'English']/Room

本例中的Class[Subject = 'English']步骤为下一步创建上下文,有效地选择节点或节点集。