代码之家  ›  专栏  ›  技术社区  ›  Landcross

XPath:如何根据元素前面的同一级别元素的值来选择元素?

  •  0
  • Landcross  · 技术社区  · 7 年前

    我使用Python和Xpath从一些html页面提取数据,遇到了一些问题。

    考虑以下HTML示例:

    <tbody>
        <tr>
            <th>Author</th>
        </tr>
        <tr>
            <td>Dan Brown</td>
        </tr>
        <tr>
            <th>Genre</th>
        </tr>
        <tr>
            <td>Educational</td>
        </tr>
    </tbody>
    

    如何选择作者数据或流派数据?我不能使用固定的列表位置(例如tr[2]),因为值并不总是在那里。例如,如果一本书没有作者,tr[2]会突然成为流派(假设它确实有流派)。

    1 回复  |  直到 7 年前
        1
  •  1
  •   zx485 potemkin    7 年前

    一种简单的方法是应用以下XPath-1.0表达式:

    /tbody/tr[th/text()='Author']/following-sibling::tr/td/text()
    

    选择 Dan Brown

    /tbody/tr[th/text()='Genre']/following-sibling::tr/td/text()
    

    选择 Educational
    如果需要,可以在表达式前面加上 /

    如果这些表达式 预期结果取决于(非共享)XML文件的结构。