首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用text()进行值比较是或受支持的

使用text()进行值比较是或受支持的
EN

Stack Overflow用户
提问于 2021-07-03 13:11:01
回答 1查看 22关注 0票数 0

输入xml

代码语言:javascript
复制
<?xml version='1.0' encoding='UTF-8'?>
<Report>
    <Employee State="A">
        <Information>
            <Data Name="Rank">SM1</Data>
            <Data Name="City">CA</Data>
        </Information>
    </Employee>
    <Employee State="B">
        <Information>
            <Data Name="Rank">SM2</Data>
            <Data Name="City">CA</Data>
        </Information>
    </Employee>
    <Employee State="A">
        <Information>
            <Data Name="Rank">SM3</Data>
            <Data Name="City">CB</Data>
        </Information>
    </Employee>
    <Employee State="D"/>
    <Information>
        <Data Name="Rank">SM1</Data>
    </Information>
</Report>

我想要获取Employee节点之前的所有"Employee“节点,这些节点的"State”属性值为"D“,并且其"Name”属性值为"Rank“的"Data”元素值为SM1或SM2

这意味着对于上面的输入,我希望输出如下:

代码语言:javascript
复制
<Employee State="A">
        <Information>
            <Data Name="Rank">SM1</Data>
            <Data Name="City">CA</Data>
        </Information>
    </Employee>
    <Employee State="B">
        <Information>
            <Data Name="Rank">SM2</Data>
            <Data Name="City">CA</Data>
        </Information>
    </Employee>

我使用路径表达式作为

代码语言:javascript
复制
/Report/Employee[@State='D']/preceding-sibling::Employee/Information[Data[@Name='Rank']/text()='SM1' or text()='SM2']

我还试着用

代码语言:javascript
复制
/Report/Employee[@State='D']/preceding-sibling::Employee/Information[Data[@Name='Rank']/text()='SM1' or 'SM2']

我有related question

但是看起来语法对属性值是有效的,而不是元素值,语法也不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-03 16:28:11

首先,使用text()来获取元素节点的字符串值是不必要的,也是不好的做法。

其次,你需要告诉我们你使用的是哪个版本的XPath,因为1.0,2.0和3.1都是常用的。

在2.0+中,您可以编写

代码语言:javascript
复制
/Report/Employee[@State='D']/preceding-sibling::Employee
   [Information[Data[@Name='Rank']=('SM1','SM2')]]

在1.0中,它是

代码语言:javascript
复制
/Report/Employee[@State='D']/preceding-sibling::Employee
   [Information[Data[@Name='Rank'][.='SM1' or .='SM2']]]

请注意,这将根据请求返回Employee元素,而您的尝试将返回Information元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68233426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档