如何使用HTML中的XPath为具有相同类的父级匹配不同数量的子元素?

时间:2017-06-20 13:49:58

标签: html xpath

我有一个具有以下结构的网页,我正在通过XPath Helper Google Chrome extenson从中提取数据

<div class="example">
   <span class="name">John Doe</span>
   <span class="foo">1</div>
</div>
<div class="example">
   <span class="name">Jane Doe</span>   
</div>
<div class="example">
   <span class="name">Richard Roe</span>
</div>
<div class="example">
   <span class="name">Jane Roe</span>
   <span class="foo">2</div>
</div>

我想使用XPath选择每个示例变量的namefoo。如果变量没有foo值,则应显示0blankNULL,以便我可以将每个namefoo匹配1}}

此查询//div[@class="example"]/span[@class="name"]可以返回所有名称

John Doe
Jane Doe
Richard Roe
Jane Roe

但是,对于此查询//div[@class="example"]/span[@class="foo"],我只会在foo存在时获得结果

1
2

单独使用这两个查询,我无法跟踪foo div下每个name属于example的{​​{1}}。

理想情况下,我需要一个返回

的查询
John Doe, 1
Jane Doe, 0
Richard Roe, 0
Jane Roe, 2

但是,如果我只能获得第二部分的查询

1
0
0
2

它也有效,因为我可以将结果与各自的名称相匹配。

如何使用XPath 1.0构建查询来完成此任务?

1 个答案:

答案 0 :(得分:0)

使用XPath 2.0,你可以使用for循环:

for $ex in //div[@class='example']
 return concat( $ex/span[@class='name'], ',', sum($ex/span[@class='foo'], '0'))

它返回:

John Doe,1
Jane Doe,0
Richard Roe,0
Jane Roe,2