首页 文章

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

提问于
浏览
1

给定一个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 )的单独子元素( SESSIONEXTENSIONATTRIBUTE )?

2 回答

  • 0

    以下XPath返回 NAME SESSIONNAME NAME NAMEATTRIBUTE VALUE""SESSIONEXTENSION TYPE"READER"

    //SESSION[ATTRIBUTE[@NAME='General Options'][@VALUE='']][SESSIONEXTENSION[@TYPE='READER']]/@NAME
    

    这条路径的基本结构如下:

    // tag[child1[condition1][condition2]][child[condition3]]/@attr
    

    或者您可以将其更新为:

    // tag[child1[condition1 and condition2] and child[condition3]]/@attr
    

    要按条件使用模式排除项目: [not(condition)]

    所以不要包括WRITER,请使用:

    //SESSION[ATTRIBUTE[@NAME='General Options'][@VALUE='']][SESSIONEXTENSION[@TYPE='READER']][not(SESSIONEXTENSION[@TYPE='WRITER'])]/@NAME
    
  • 2

    基于@ splash58的注释,我相信以下XPath返回所需的值(“当 Attribute nameGeneral Optionsvalues =""sessionextension type="READER" 时, sessionname ”):

    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 .

相关问题