繁体   English   中英

如何通过XPath获取XML节点

[英]How to get the XML Node via XPath

我有一个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(“ Room”)&XPath(“ Subject”)的形式访问客户端中的节点

这给了我该特定属性的值。

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

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

谁能告诉我如何通过XPath或其他方法获得它。

如果要第一个“类”,请使用:

(//Class)[1]

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

/Class

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

/Root/Class

后代轴表达式,例如:

//Class

它将选择一个包含所有类的节点集,而与它们的嵌套无关(如果在层次结构中有更深的Class元素,则在这种情况下也将选择它们)。

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

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

//Class[Room = '2']

您还可以按主题选择:

//Class[Subject = 'Maths']

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

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

在这种情况下, Class[Subject = 'English']步骤仅为下一步创建上下文 ,从而有效地选择节点或节点集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM