在XPath中选择带或运算符的A或B.

时间:2014-04-02 14:18:08

标签: xpath

我正在尝试抓取一些网站,根据网站的不同,可以找到我想要的数据:

第1页:

<div>
   <ul>
     <li class="asd"> SomeText1 </li>
   </ul>
</div>

第2页:

<div>
   <ul>
     <li class="dsa"> SomeText2 </li>
   </ul>
</div>

我想要一个XPath表达式,它首先尝试选择SomeText1,如果它不存在,则尝试获取SomeText2。

我已经尝试了//li[@class="asd"]/text() or //li[@class="dsa"]/text(),但这似乎没有削减它。

我使用or运算符错了吗?如果是这样,它应该如何使用?

修改

我正在尝试向抓取工具提供XPath,以便查找要存储在数据库中的信息。在给定的网页上,我想要的信息可以是两个不同的地方吗?

这意味着网页1可能是:

<AA>
  <BB>
    <CC> Test </CC>
  </BB>
</AA>

而另一个可能有

<DD>
  <EE>
    <FF> Test </FF>
  </EE>
</DD>

我如何构造一个可以说是的XPath表达式 AA/BB/CC或(如果失败/不存在)DD/EE/FF

2 个答案:

答案 0 :(得分:4)

您可以将其缩短为:

//li[@class = 'asd' or @class = 'dsa']/text()

话虽如此,“不工作”绝不能准确描述出错的地方。潜在的错误来源是双引号而不是单引号。如果表达式中有双引号,则内部的任何引号都必须是单引号。

  

我使用或运算符错了吗?

不,您对or运算符的使用很好。出了别的问题。 (要真正诊断您的问题,我们需要更多上下文)。

答案 1 :(得分:1)

...试

//li[@class="asd" or @class="dsa"]/text()