通过XPath找到一个具有特定文本的子元素

时间:2014-02-20 17:07:59

标签: xml text xpath path contains

我在野外看到过类似的问题,但由于某种原因,我无法找到正确的方法。

所以我得到this page

在主要项目下有2篇文章(商品)

  1. eZ Publish - 男士夹克
  2. eZ Publish - iPhone 4 Case
  3. 我想在包含man jacket

    的文章中获取输入(文本)字段

    我已尝试过什么:

    //article[ //h3[ text() = "eZ Publish - Man jacket"] ]//input
    //article[ //h3[contains(text(), "eZ Publish - Man jacket")] ]//input
    //article[ contains( .//h3[ text() = 'eZ Publish - Man jacket' ] ) ]//input
    

    下一个有效:

    //h3[text()='eZ Publish - Man jacket']/../../..//input
    

    ......但这不是一种选择......

    知道我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

您可能意味着//article[.//h3[ text() = "eZ Publish - Man jacket"] ]//input,即在article上下文中使用相对XPath表达式(以'。'开头)

答案 1 :(得分:0)

您的第一个XPath表达式有效,但是根据您的源XML,您将看不到任何值,因为您的“输入”元素没有值,而是具有值的属性。

如果要输出所有属性值,则需要在“input”之后添加/ @ *以指定所有(*)属性(/@).

你的第二个XPath表达式将不起作用,因为你试图传递一个节点树(text(),它正在针对// h3运行,因此返回多个节点)作为contains函数的字符串参数。

你的第三个XPath表达式不起作用,因为你只将一个参数传递给contains,这需要两个。

希望这有帮助。