Xml 在单独的父元素和子元素上具有条件的XPath表达式

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

给定如下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>
返回一个
会话
元素,该元素包含所搜索的
名称
属性值

但是,我尝试使用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