【问题标题】:How to select following sibling/XML tag using XPath如何使用 XPath 选择以下同级/XML 标记
【发布时间】:2011-03-09 12:55:58
【问题描述】:

我有一个 HTML 文件(来自 Newegg),它们的 HTML 组织如下。他们的规格表中的所有数据都是“desc”,而每个部分的标题都在“name.”中。下面是来自 Newegg 页面的两个数据示例。 p>

<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

并为其余的值执行此操作。我将如何完成下一个兄弟姐妹,有没有更简单的方法?

【问题讨论】:

    标签: xml xpath lxml


    【解决方案1】:

    我将如何完成下一个兄弟姐妹 有没有更简单的方法 这个?

    您可以使用

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

    但我宁愿直接使用

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

    假设

    1. 评估 XPath 表达式所依据的上下文节点是所有 tr 元素的父级 - 未在您的问题中显示。

    2. 每个tr元素只有一个tdclass属性值为'name',只有一个tdclass属性值为'desc'

    【讨论】:

    • 请注意,您必须小心使用类。当您的“名称”类元素同时具有任何其他类时,td[@class='name'] 将中断。详情请见this question
    • @gm2008,是的,如果@class 属性的值中有多个类,则要使用的谓词是:contains(concat(' ', @class, ' '), ' name ')。但在这个问题中,@class 属性确实只有单个值。
    • 相对于一个元素:./following-sibling::td
    • @JohnGietzen, Re: "Relative to an element" -- 你的意思是如果 context 节点 是我们感兴趣的元素。在这种情况下你可以省略 @987654335 @ .另外,如果要选择紧随其后的兄弟,请使用:following-sibling::td[1],否则,如果有多个以下兄弟,则将全部选中。
    【解决方案2】:

    试试following-sibling 轴 (following-sibling::td)。

    【讨论】:

      【解决方案3】:

      为了完整性-添加到上面接受的答案-如果您对任何兄弟元素感兴趣,无论元素类型如何,您都可以使用变体:

      following-sibling::*

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        相关资源
        最近更新 更多