2014-01-30 26 views
0

我有一个用于输出HTML的提要。下面的部分是输出用于处理示例HTML片段的最佳XPath查询

<div class="leftnav"> 
    <table border="0" cols="2"> 

     <tr> 
      <td colspan="2" class="topline"><span style="font-size: 1px">&nbsp;</span></td> 
     </tr> 
     <tr> 
      <td colspan="2"><span class="bold">Article Cat1 </span></td> 
     </tr> 
     <tr> 
      <td class="date" colspan="2"> 
       ArticleTitle1</td> 
     </tr> 
     <tr> 
      <td width="20"></td> 
      <td class="date"> 
       ArticleLink1 
      </td> 
     </tr> 

     <tr> 
      <td colspan="2" class="topline"><span style="font-size: 1px">&nbsp;</span></td> 
     </tr> 
     <tr> 
      <td colspan="2"><span class="bold">Article Cat2 </span></td> 
     </tr> 
     <tr> 
      <td class="date" colspan="2"> 
       ArticleTitle2</td> 
     </tr> 
     <tr> 
      <td width="20"></td> 
      <td class="date"> 
       ArticleLink2 
      </td> 
     </tr> 
    </table> 
</div>   

我想用XPATH使输出看起来像这样

文章CAT1 ArticleTitle1 ArticleLink1文章CAT2 ArticleTitle2 ArticleLink2处理上述手段的部分

什么是会产生所需输出的最佳XPATH?我试过//div[@class="leftnav"]/table/tr,但是这给出了所有的TR元素。我想跳过第一个TR元素,以便我可以按照上面描述的格式获取输出。

回答

0
//div[@class="leftnav"]/table/tr[position() > 1] 

试试上面的

0

愚蠢的简单的方法:

substring-after(normalize-space(string(//*:div)), normalize-space(string(//*:div/*:table/*[1]))) 

结果: “第CAT1 ArticleTitle1 ArticleLink1 NBSP文章CAT2 ArticleTitle2 ArticleLink2”

我不知道为什么,但(position() > 1)在我的环境中不起作用,所以我使用了字符串。

+0

这只是XPath 2.0,大多数实现只支持XPath 1.0。为什么你省略了一个甚至没有给出的命名空间? –