给定一个XML文档,如:
<SESSION NAME ="TEST" REUSABLE ="NO" SORTORDER ="Binary" VERSIONNUMBER ="1">
<SESSIONEXTENSION DSQINSTNAME ="TEST_SQ" DSQINSTTYPE ="Source Qualifier" NAME ="Relational Reader" SINSTANCENAME ="TEST_SQ" SUBTYPE ="Relational Reader" TRANSFORMATIONTYPE ="Source Definition" TYPE ="READER"/>
<SESSIONEXTENSION DSQINSTNAME ="TEST_TG" DSQINSTTYPE ="Source Qualifier" NAME ="Relational Reader" SINSTANCENAME ="TEST_TG" SUBTYPE ="Relational Reader" TRANSFORMATIONTYPE ="Source Definition" TYPE ="WRITER"/>
<ATTRIBUTE NAME ="General Options" VALUE =""/>
</SESSION>
我希望为 SESSION
元素提取 SESSION
元素的 NAME
属性,其中满足以下所有条件:
-
子
SESSIONEXTENSION
元素的TYPE
属性值等于"READER"
, -
子
ATTRIBUTE
元素的NAME
属性值等于"General Options"
和 -
子
ATTRIBUTE
元素的VALUE
属性值等于""
.
XPath表达式
/SESSION/SESSIONEXTENSION[@TYPE='READER']
返回包含所寻求的 NAME
属性值的 SESSION
元素 .
但是,我尝试在XPath表达式中指定上述所有三个 SESSION
元素要求列表
/SESSION/SESSIONEXTENSION[@TYPE='READER']/ATTRIBUTE[@NAME="General Options" and VALUE =""]
没有按预期工作 .
如何在XPath表达式中声明多个条件,其中条件是父元素( SESSION
)的单独子元素( SESSIONEXTENSION
, ATTRIBUTE
)?
2 回答
以下XPath返回
NAME
SESSION
的NAME
NAME
NAME
,ATTRIBUTE
VALUE
是""
,SESSIONEXTENSION
TYPE
是"READER"
:这条路径的基本结构如下:
或者您可以将其更新为:
要按条件使用模式排除项目:
[not(condition)]
所以不要包括WRITER,请使用:
基于@ splash58的注释,我相信以下XPath返回所需的值(“当
Attribute name
是General Options
和values =""
和sessionextension type="READER"
时,session
的name
”):XPath根据问题中的XML进行评估,结果如下:
删除XPath周围的
string()
换行以获取属性名称和值 - 即:评估为
针对上述XML .
使用https://www.freeformatter.com/xpath-tester.html测试上面的XPath .