Xpath从XML中获取没有子节点的特定节点

时间:2015-05-06 09:52:58

标签: xpath web-crawler

我的XML数据看起来像这样

<priceData>
  <div class='price'>
    <div class='price-old'>20.00</div>
    <div class='price-new'>10.00</div>
    <div class='price-tax'>8.00</div>
  </div>
  <div class='price'>
    40.00 <div class='price-tax'>25.00</div>
  </div>
 </priceData>

我想使用Xpath从第一个价格div中提取“price-new”的数据,并从第二个价格div中提取值40.00。这必须使用单个表达式完成。

我尝试了像

这样的表达式
//div[contains(@class, 'price') and not(contains(@class, 'tax')) and not(contains(@class, '-old'))]

//div[contains(@class, 'price') and not(contains(@class, 'tax')) and not(descendant::div[contains(@class, '-old') and not(contains(@class, '-tax'))]) and not(contains(@class, '-old'))]

和其他一些人,但我不能让它工作如何。 我总是从第一个案例中获取额外的节点,我只需要单个节点(如果没有更多节点,则需要新价格或价格)。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用xpath union(|)将2个查询合并为一个。给定问题中的标记为XML输入,以下xpath(为便于阅读而格式化):

//div[@class='price']/div[@class='price-new']/text()
    | 
//div[@class='price']/text()[normalize-space()]

xpath tester中返回'预期'结果:

Text='10.00'
Text='40.00'