Xml 在单独的父元素和子元素上具有条件的XPath表达式
给定如下XML文档:Xml 在单独的父元素和子元素上具有条件的XPath表达式,xml,xpath,Xml,Xpath,给定如下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 Read
<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>
返回一个会话
元素,该元素包含所搜索的名称
属性值
但是,我尝试使用XPath表达式来指定上述会话
元素要求列表中的所有三项
/SESSION/SESSIONEXTENSION[@TYPE='READER']/ATTRIBUTE[@NAME="General Options" and VALUE =""]
没有按预期工作
如果XPath表达式中的多个条件是父元素(
SESSION
)的独立子元素(SESSIONEXTENSION
,属性
),如何在其中声明这些条件 基于@splash58的评论,我相信下面的XPath会返回所需的值(“当属性名
为常规选项
和值=”
和sessionextension type=“READER”
)时,会话的名称
:
根据问题中的XML计算的XPath结果为:
TEST
删除string()
环绕XPath以获取属性名称和值-即:
/SESSION[SESSIONEXTENSION[@TYPE='READER'] and ATTRIBUTE[@NAME="General Options" and @VALUE =""]]/@NAME
评估结果是
NAME=TEST
针对上述XML
下面的XPath返回会话
元素的名称
,其中属性
名称
是“常规选项”
,属性
值是,会话扩展
类型
是阅读器
:
该路径的基本结构如下所示:
// tag[child1[condition1][condition2]][child[condition3]]/@attr
或者,您可以将其更新为:
// tag[child1[condition1 and condition2] and child[condition3]]/@attr
要按条件使用模式排除项目:[非(条件)]
因此,不包括WRITER,请使用以下命令:
//SESSION[ATTRIBUTE[@NAME='General Options'][@VALUE='']][SESSIONEXTENSION[@TYPE='READER']][not(SESSIONEXTENSION[@TYPE='WRITER'])]/@NAME
请尝试使用
@VALUE=…
而不是VALUE=…
会话[SESSIONEXTENSION[@TYPE='READER']和属性[@NAME=“General Options”和@VALUE=”“]]的可能重复项。您好,谢谢您的回答。如果有两个名为SESSIONEXTENSION的孩子,一个名为TYPE=“WRITER”,并且只有当我的SESSIONEXTENSION中没有一个名为TYPE=“WRITER”的孩子时,我才需要获取会话名称。在这种情况下,我不会收到任何结果。我应该如何修改我的xpath表达式?您应该向会话中添加另一个参数,若要按条件排除元素,我将在一分钟内更新答案
// tag[child1[condition1][condition2]][child[condition3]]/@attr
// tag[child1[condition1 and condition2] and child[condition3]]/@attr
//SESSION[ATTRIBUTE[@NAME='General Options'][@VALUE='']][SESSIONEXTENSION[@TYPE='READER']][not(SESSIONEXTENSION[@TYPE='WRITER'])]/@NAME