我想检索 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 id
和text() = "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/