XPATH - 具有不同级别条件的节点的路径

时间:2012-05-04 21:40:27

标签: sql xml xpath

我有以下XML结构,需要在

中获取值
<VALUE><![CDATA[PRUEBAS BPM]]></VALUE> 

我需要检查两个条件:

  1. 获取节点FIELD [NAME =“dependency”]
  2. 前往FIELD [NAME =“name”]
  3. 我的XPATH实际上是这样编写的

    /TRAIL/ENTITY/FIELD[NAME="dependency"]/ENTITY/FIELD[NAME="name"]/PRIMITIVE/VALUE/text()
    

    但是,它没有带来任何数据。 我的XPATH错误地写了吗?如何在xml中理清对该信息的访问?

    任何帮助都将受到高度赞赏。

    这是我的XML结构

    <TRAIL>
      <ENTITY>
        <FIELD>
          <NAME>dependency</NAME>
          <ENTITY>
            <FIELD>
              <NAME>codigo</NAME>
              <PRIMITIVE>
                <VALUE><![CDATA[906]]></VALUE>
              </PRIMITIVE>
            </FIELD>
            <FIELD>
              <NAME>name</NAME>
              <PRIMITIVE>
                <VALUE><![CDATA[PRUEBAS BPM]]></VALUE>
              </PRIMITIVE>
            </FIELD>
          </ENTITY>
        </FIELD>
      </ENTITY>
    </TRAIL>
    

    提前感谢您的帮助!


    作为额外的我必须添加我正在使用此XPATH直接从数据库中检索信息。 这是我的SQL语句(delta是包含XML的表的列)

    SELECT XPATH('(/TRAIL/ENTITY/FIELD[NAME="dependency"]/ENTITY/FIELD[NAME="name"])/PRIMITIVE/VALUE/text()', CAST( SUBSTRING( delta FROM position('<TRAIL>' IN delta) FOR char_length(delta)) AS ml ) ) FROM aud_huella_expediente
    

2 个答案:

答案 0 :(得分:1)

您的XPath是正确的(从表达式的末尾删除text()并测试它online)。很可能您的问题来自CDATA部分,请参阅How do I retrieve element text inside CDATA markup via XPath?

答案 1 :(得分:0)

看起来你只需要删除正确的paren:

/TRAIL/ENTITY/FIELD[NAME="dependency"]/ENTITY/FIELD[NAME="name"]/PRIMITIVE/VALUE/text()