XPath排除查询需求:Q1值不为Q1Yes时返回对应DD的值
符合需求的XPath查询语句
需求:仅提取**同一rowinstance节点下,name属性为Q1的field节点文本值不是Q1Yes**对应的name属性为DD的field节点文本内容。
XML示例
<form> <field name="ImageQualityRepeating" visible="true"> <rowinstance entryMod="Daily Diary" id="Daily Diary_1689194865577:0" index="1" lockedRow="false" newrow="true"> <field name="Q1" visible="true">Q1Yes</field> <field name="Q1Yes" visible="true">true</field> <field name="QCDone" visible="true">QCDoneCheck</field> <field name="DD" visible="true">1</field> </rowinstance> <rowinstance entryMod="Daily Diary" id="Daily Diary_1689194865677:0" index="1" lockedRow="false" newrow="true"> <field name="Q1" visible="true"/> <field name="Q1Yes" visible="true">true</field> <field name="QCDone" visible="true">QCDoneCheck</field> <field name="DD" visible="true">2</field> </rowinstance> </field> </form>
现有查询语句及结果
- 查询Q1值的语句:
/form/field[@name='ImageQualityRepeating']/rowinstance/field[@name='Q1' and @visible='true']/text()
返回结果:Q1Yes
- 查询DD值的语句:
/form/field[@name='ImageQualityRepeating']/rowinstance/field[@name='DD' and @visible='true']/text()
返回结果:1
满足需求的XPath语句
/form/field[@name='ImageQualityRepeating']/rowinstance[field[@name='Q1' and @visible='true']/text() != 'Q1Yes' or not(field[@name='Q1' and @visible='true']/text())]/field[@name='DD' and @visible='true']/text()
语句逻辑说明
- 先筛选出符合条件的
rowinstance节点:- 要么
name为Q1的field文本值不等于Q1Yes - 要么
name为Q1的field没有文本内容(比如示例中第二个rowinstance的Q1是空节点)
- 要么
- 再从这些符合条件的
rowinstance下,提取name为DD且visible为true的field的文本值
在给定的XML示例中执行该语句,会返回2,完全匹配需求。
内容的提问来源于stack exchange,提问作者user2568374
相关产品推荐
相关产品推荐

