2011-07-26 58 views
1

我有这样的XPath表达式不起作用C#htmlagilitypack XPath的帮助

"//div[child[0]::h4[text()[contains(.,'Dir')]]]/a" 

为了解析这个网站:

<div class="txt"> 
     <h4 class="c1"> 
     Dir 
     </h4> 
    <a href="/name/myname/">Bob</a> 
</div> 

我想获得在链路节点(A)。文档中还有其他html标签具有相同的div/h4层次结构,唯一的区别是h4标签的内文。那么如何检查div类(1)是否具有带有内部文本“dir”的子h4节点以及(2)获取第一个链接节点(a)。不要以为这个链接是h4的下一个兄弟。

+0

你非常接近,但你不能把一个谓语在轴上,所以'孩子[0] ::'不正确。如果你想要'div'的第一个'h4'子元素,你可以使用'// div [child :: h4 [1] [text()[...]]/a',或者只用'// div [ h4 [1] [text()[...]]/a',因为'child ::'对于元素是隐含的。如果'h4'必须是第一个子元素,然后'// DIV [* [1] /自:: H4 [...]]/A'。 – LarsH

回答

2

难道你不能只用这个xpath?

"//div[h4[contains(text(),'Dir')]]/a" 

child[0]不是有效的轴线AFAIK所以它将失败。

我不知道这是否能够满足您的条件,而不会看到更完整的示例HTML。但是这对这个确实有用。

如果有可能,有在div内的多个h4元素,你只需要检查的第一个:

"//div[h4[1][contains(text(),'Dir')]]/a" 
+0

注意:我已经假设您将对这些xpath使用'SelectSingleNode()'方法。所以如果有多个'a'元素,这将已经采取了第一个(根据需要)。 –

1

如何检查DIV类(1)有子H4与内部文本 “目录”,节点(2)获得第一个链接点(一)

使用:

"//div[@class='txt' and h4[contains(.,'Dir')]]/a[1]" 
+1

同意,除了你可能不需要'h4'之后的'[1]'。或者你是从OP的'child [0] :: h4'推断出来的? – LarsH

+0

@LarsH你的观察是_logically_一致的。 'h4'就足够了,因为我们把它当作条件使用。 OP要求_a不是第一个。 –