[英]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']
最后,一旦有了上下文,就可以选择该范围内的其他元素。 例如,当Subject
为English
时,您可以获得Room
号:
//Class[Subject = 'English']/Room
在这种情况下, Class[Subject = 'English']
步骤仅为下一步创建上下文 ,从而有效地选择节点或节点集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.