如何使用 XPath 选择以下兄弟/XML 标记

我有一个 HTML 文件(来自 Newegg) ,它们的 HTML 组织如下。他们的规格表中的所有数据都是“ Desc”,而每个部分的标题都是“ 姓名。”。下面是两个来自 Newegg 页面的数据例子。

<tr>
<td class="name">Brand</td>
<td class="desc">Intel</td>
</tr>
<tr>
<td class="name">Series</td>
<td class="desc">Core i5</td>
</tr>
<tr>
<td class="name">Cores</td>
<td class="desc">4</td>
</tr>
<tr>
<td class="name">Socket</td>
<td class="desc">LGA 1156</td>

<tr>
<td class="name">Brand</td>
<td class="desc">AMD</td>
</tr>
<tr>
<td class="name">Series</td>
<td class="desc">Phenom II X4</td>
</tr>
<tr>
<td class="name">Cores</td>
<td class="desc">4</td>
</tr>
<tr>
<td class="name">Socket</td>
<td class="desc">Socket AM3</td>
</tr>

最后,我想有一个类的 CPU (已经建立) ,包括一个品牌,系列,核心,和插座类型存储每个数据。这是我能想到的唯一办法:

if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text

然后对剩下的值进行这样的操作。我如何完成下一个兄弟姐妹,有没有更简单的方法来做到这一点?

193636 次浏览

Try the following-sibling axis (following-sibling::td).

我要怎么完成我的兄弟姐妹呢 and is there an easier way of doing this?

You may use:

tr/td[@class='name']/following-sibling::td

但我宁愿直接使用 :

tr[td[@class='name'] ='Brand']/td[@class='desc']

这里假设:

  1. 计算 XPath 表达式所依据的上下文节点是所有 tr元素的父节点——在您的问题中没有显示。

  2. 每个 tr元素只有一个具有 class属性值 'name'td和一个具有 class属性值 'desc'td

如果你对 无论元素类型如何,都可以是任何同级元素感兴趣的话,为了完整性-增加上面已经接受的答案-你可以使用变体:

following-sibling::*