我有一个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(已经设置好)的类,它由Brand,Series,Cores和Socket类型组成,用于存储每个数据。这是我能想到的唯一方法:
if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
为其余值执行此操作。我如何完成nextsibling并且有更简单的方法吗?
答案 0 :(得分:173)
我将如何完成nextsibling 并且有一种更简单的方法 此?
您可以使用:
tr/td[@class='name']/following-sibling::td
但我宁愿直接使用:
tr[td[@class='name'] ='Brand']/td[@class='desc']
这假定:
评估XPath表达式的上下文节点是所有tr
元素的父元素 - 未在您的问题中显示。
每个tr
元素只有一个td
,class
属性值'name'
,只有一个td
class
属性值'desc'
。
答案 1 :(得分:7)
尝试following-sibling
轴(following-sibling::td
)。
答案 2 :(得分:0)
出于完整性考虑-在上面添加了可接受的答案-如果您对任何同级元素(无论元素类型如何)感兴趣,则可以使用变体形式:
following-sibling::*