java - 如何在 Xpath 中检查多个条件

标签 java xml xpath

我想检索 id =2 且 pAddress=INDIA 的行/字段的 PName

<?xml version="1.0"?>
<mysqldump >
<database name="MyDb">
<table name="DescriptionTable">
<row>
<field name="id">1</field>
<field name="pName">XYZ</field>
<field name="pAddress">INDIA</field>
<field name="pMobile">1234567897</field>
</row>
<row>
<field name="id">2</field>
<field name="pName">PQR</field>
<field name="pAddress">UK</field>
<field name="pMobile">755377</field>
</row>
<row>
<field name="id">3</field>
<field name="pName">ABC</field>
<field name="pAddress">USA</field>
<field name="pMobile">67856697</field>
</row>
</table>
</database>
</mysqldump>

String expression="/mysqldump/database[@name='MyDb']/table[@name='DescriptionTable']/row/field[@name='id' and ./text()]";

编辑:

我想获取 id 为 2 且 pAddress=INDIA 的 Pname

String expression="/mysqldump/database[@name='MyDb']/table[@name='DescriptionTable']/row/field[@name='id' and .='2']and[@name='pAddress' and .='INDIA']/../field[@name='pName']/text()";

最佳答案

上述两个答案都可以通过将路径表达式的各个方面移至谓词中并使用嵌套的嵌套谓词来改进。恕我直言,这使得 XPath 选择更具人类可读性。

首先,我们找到,其字段@name eq idtext() = "2",从那里我们可以简单地从中选择字段,其@name eq“pName”

/mysqldump/database[@name = "MyDb"]/table[@name = "DescriptionTable"]/row[field[@name eq "id"][text() = "2"]]/field[@name = "pName"]

还要注意显式使用 eq=,eq 用于比较原子值,在本例中是选择我们的属性,而 = 用于比较序列(因为可以想象,text() 可能会返回多个项目 - 尽管它不会用于您的示例 XML)。

关于java - 如何在 Xpath 中检查多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22369612/

相关文章:

java - 当我执行 Keyboard.SetShifted 时应用程序崩溃

mysql - 创建类路径资源 [spring/application-config.xml] 中定义的名称为 'elasticsearchTemplate' 的 bean 时出错

java - 如何在 Selenium 中的 WebElement 列表上执行操作

c# - 从包含用于导航的格式良好的 XML 的字符串构造 XML 文档的有效方法?

php - 使用 PHP SimpleXML 和 XPath 解析深度 XML

xpath 匹配 - 查找值不在值集中的标签是否存在

java - 当线程被本质锁阻塞时执行代码

java - 编译器如何理解java 8将jar编译成Java 6编译java类文件

java - HSQLDB 可以处理几百万行吗?

javascript - 如何在 JavaScript 文件中正确编写 servlet url