2016-07-08 41 views
0

首先我需要一个元素a具有一定的后裔dxpath:是否可以选择具有某个后代的祖先节点?

//a/b/c/d[@class='gotcha'] 

然后,我想从a执行一些进一步的搜索,比如说采取另一种的后代:

//a/b/c/d[@class='gotcha']/../../../b2/c2/d2 

是否有打算N中的任捷径水平上升?理想情况下,我想以某种方式选择“一个,有一些后代”进一步使用。

UPD:示例XML

<a> 
<b> 
    <c><d class='gotcha'></d></c> 
</b> 
<b2> 
    <c2><d2></d2></c2> 
</b2> 
</a> 

我需要d2时,知道结构和 '疑难杂症' 值可以改变。

+1

显示示例XML或HTML,并标记您想要选择的内容。然后,我们将能够提出一个简洁的XPath。从你的(可疑的)XPath猜测是非常不理想的。谢谢。 – kjhughes

+0

html:http://www.foxsports.com.au/afl我想要摘录的内容:来自“women's afl”新闻栏目的链接。我正在使用的工作xpath:// section [@ class ='break-news']/header/h1 [re:test(text(),'women')] /../../ div/ol/li/article/header/div/h1 [@ itemprop ='name headline']/a/@ href。不知道你是否想要这个,而不是简单的例子。 – VladimirLenin

+1

请在问题本身的内容中创建一个[mcve],以便将来如果链接发生变化,它将继续对未来的读者有价值。谢谢。 – kjhughes

回答

0

我想你问的是

//a[b/c/d[@class='gotcha']]/b2/c2/d2 

即:

  • 查找具有b的孩子,有一个孩子c元素a随时随地
    • 那有d子属性class='gotcha'
  • 现在,从目前为止选择的a个元素中,找到b2子元素c2子元素d2子元素。

注:

  • XPath中的单词“子”指的是直接的孩子,而不是孙子或其他任何后代。上面的原始问题使用“孩子”来表示“后代”,这是误导和混乱。
  • XPath表达式将选择全部适用的节点。所以上述解释中的所有单数名词都可以是复数。
  • 您也可以使用//a[b/c/d/@class='gotcha']/b2/c2/d2,这将等同于上述内容,但我认为使用内部谓词可以更好地解释思维过程。
相关问题