2011-11-02 91 views
-4
之间选择元素

可能重复:
xpath select elements between two nodes如何两个标签

基于这个网站我需要两个XPath表达式:

<table dir = "rtl ......."> 
<tbody> 
<script src = "get.aspx?type=js&file=ajax&rev=3"......> 
<script language = "JavaScript" src = "get.aspx?type=js&file=mc&rev=6"></script> 
<script>..</script> 
<tr> 
<td class = "d2"...>..</td> 
</tr> 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- first expression should select these elements 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr> 
<td class = "d2"...>..</td> 
</tr> 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- second expression should select these elements 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
</tbody> 

我如何可以选择所有<tr>元素之后的第一个<td class = "d2"...>标记带有xpath表达式和全部<tr>元素之后的第二个<td class = "d2"...>标记与其他xpath表达式。

+0

@Oded我只想返回这些元素的数量做一些事情。 – NouNou

+0

你还没有回答我的问题。你尝试了什么?你尝试了什么xpath? – Oded

+0

我正在迈克iphone应用程序,并创建一个tableView与部分和我需要设置节的行数到一个特定的值,因为我需要计算这些元素。我使用HPPLE解析HTML。 – NouNou

回答

0

您可以采取两种节点序列的交集XPath 2.0中,像这样

//table/tbody/tr[td/@class = 'd2'][1]/following-sibling::tr except //table/tbody/tr[td/@class = 'd2'][2]/following-sibling::tr 

在那表情,你会得到遵循包含类D2的第一个TD的TR中的所有TR兄弟姐妹,和然后删除第二个这样的tr之后的那些。

不幸的是,XPath 1.0没有两个节点集相交的概念。但是,你可以得到两个节点集工会XPath 1.0中,像这样:

//table/tbody/tr[td/@class = 'd2'][1]/following-sibling::tr | //table/tbody/tr[td/@class = 'd2'][2]/preceding-sibling::tr 

下面的路径将让你包含D2级的TD第二TR后的TR节点

//table/tbody/tr[td/@class = 'd2'][2]/following-sibling::tr 
+0

我正在使用XPath 1.0 – NouNou

+0

我更新了答案,以显示使用XPath 1.0 – Mjonir74

+0

@ Mjonir74感谢它的工作时的替代路径。 – NouNou