给出一个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>
我希望为NAME
元素提取SESSION
元素的SESSION
属性,其中包含以下所有条件:
SESSIONEXTENSION
元素&lt; {1}}属性值等于TYPE
,"READER"
元素的ATTRIBUTE
属性值等于NAME
和"General Options"
元素&lt ATTRIBUTE
属性值等于VALUE
。XPath表达式
""
返回包含所寻求的/SESSION/SESSIONEXTENSION[@TYPE='READER']
属性值的SESSION
元素。
然而,我尝试使用XPath表达式指定上述所有三个NAME
元素要求
SESSION
没有按预期工作。
如何在XPath表达式中声明多个条件,其中条件是父元素( /SESSION/SESSIONEXTENSION[@TYPE='READER']/ATTRIBUTE[@NAME="General Options" and VALUE =""]
)的单独子元素(SESSIONEXTENSION
,ATTRIBUTE
)?
答案 0 :(得分:2)
以下XPath返回NAME
SESSION
为ATTRIBUTE
的{{1}}元素NAME
,"General Options"
{{1} } ATTRIBUTE
而VALUE
""
为SESSIONEXTENSION
:
TYPE
这条路径的基本结构如下:
"READER"
或者您可以将其更新为:
//SESSION[ATTRIBUTE[@NAME='General Options'][@VALUE='']][SESSIONEXTENSION[@TYPE='READER']]/@NAME
按条件使用模式排除项目:// tag[child1[condition1][condition2]][child[condition3]]/@attr
所以不要包括WRITER,请使用:
// tag[child1[condition1 and condition2] and child[condition3]]/@attr
答案 1 :(得分:0)
在@ splash58的评论的基础上,我相信以下XPath会返回所需的值(&#34; name
session
时Attribute name
为General Options
1}}和values =""
以及sessionextension type="READER"
&#34;):
string(/SESSION[SESSIONEXTENSION[@TYPE='READER'] and ATTRIBUTE[@NAME="General Options" and @VALUE =""]]/@NAME)
XPath根据问题对XML进行评估,结果如下:
TEST
删除XPath周围的string()
环绕以获取属性名称和值 - 即:
/SESSION[SESSIONEXTENSION[@TYPE='READER'] and ATTRIBUTE[@NAME="General Options" and @VALUE =""]]/@NAME
评估为
NAME=TEST
针对上述XML。
使用https://www.freeformatter.com/xpath-tester.html测试上面的XPath。