XPath基于同一节点中的节点文本选择节点文本

时间:2019-04-19 20:20:27

标签: xml xpath

我正在尝试基于xpath搜索来找到该节点中的xml文件中的值。我遇到的问题是我关注的节点的ID和正在寻找的值是同级,因此我无法遍历树。我想知道是否有办法做到这一点。

这是一个xml示例:

<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

基于此示例,我只想为Kad选择标记元素。

我的xpath搜索Kad作品

//student/lastname[text()="Kad"]

我希望如此

//student/lastname[text()="Kad"]/marks

返回85,但无法说它具有无效的令牌。

如何根据姓氏为“ Kad”或仅其他任何学生选择分数?

更新的代码:

<IMPORT xmlns="urn:Import">
    <STUFF>
        <STUFF_TYPE>
            <STUFF_TYPE_KEY>1</STUFF_TYPE_KEY>
        </STUFF_TYPE>
        <WALMART>
            <STORE>
                <STORE_ID TYPE="SC" ID="SC-12345">WM000001</STORE_ID>
                <STORE_STATUS>O</STORE_STATUS>
            </STORE>
        </WALMART> 
    </STUFF>
</IMPORT>

它适用于学生示例,但不适用于沃尔玛示例

2 个答案:

答案 0 :(得分:1)

此XPath,

/class/student[lastname="Kad"]/marks

选择这些marks元素中的student个元素,并带有一个lastname子元素,其子元素的字符串值为"Kad"

另请参阅Testing text() nodes vs string values in XPath

答案 1 :(得分:0)

您还可以通过相关student元素的子元素获取值:

//student[lastname="Kad"]/child::*[4]