【问题标题】:Extract attribute's value with XPATH in a special case在特殊情况下使用 XPATH 提取属性值
【发布时间】:2012-09-14 12:17:40
【问题描述】:

您好,我需要帮助才能使用 xpath 从 XML 中提取信息。

我将使用 Xpath 来提取一个以通用键开头的 Tag 的属性值:

<st:Testprova id='abcd'>
  ....
</st>

  or

<st:Test1prova id='defg'>
  ....
</st>

我使用了那个 Xpath 表达式:

"//*[contains(.,'prova')]/@ID"

但不起作用。你能帮帮我吗?

【问题讨论】:

    标签: java xml design-patterns xpath tags


    【解决方案1】:

    您使用的是@ID 而不是@id,这是区分大小写的。此外,您应该使用name() 来检索节点名称。

    这个 XPath 表达式

    //*[contains(name(),'prova')]/@id
    

    返回abcddefg

    虽然你的 XML 不正确,但应该是:

    <st:Testprova id='abcd'>
      ....
    </st:Testprova>
    <st:Test1prova id='defg'>
      ....
    </st:Test1prova>
    

    【讨论】:

      【解决方案2】:

      在这种情况下要使用的正确函数是matches()

      contains() 即使对于像

      这样的节点名称也可以返回 true
      Testprova
      Prodprova
      UATprova
      provaTest
      

      和其他曾经包含单词 prova 的。

      但是,如果您知道节点名称的模式,matches() 函数会准确过滤出所需的节点。

      因此,如果我假设两个单词之间可能出现一个数字,则 xpath 可以如下所示

      //*[matches(name(), '^Test[0-9]?prova$')]//@ID
      

      注意:匹配函数是Xpath2.0的一部分,在Xpath1.0中不起作用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-26
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        相关资源
        最近更新 更多