web-dev-qa-db-fra.com

Comment sélectionner la balise suivante xbling à l'aide de xpath

J'ai un fichier HTML (de Newegg) et leur code HTML est organisé comme ci-dessous. Toutes les données de leur tableau de spécifications sont 'desc', tandis que les titres de chaque section sont en 'nom.'. Vous trouverez ci-dessous deux exemples de données issues de pages 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>

En fin de compte, j'aimerais disposer d'une classe pour un processeur (qui est déjà configuré) et qui consiste en un type de marque, série, cœurs et socket pour stocker chacune des données. C’est le seul moyen auquel je peux penser pour faire cela:

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

Et faire cela pour le reste des valeurs. Comment pourrais-je accomplir le dialogue suivant et y a-t-il un moyen plus simple de le faire?

86
Corey Farwell

Comment pourrais-je accomplir le dialogue suivant et y a-t-il un moyen plus simple de le faire?

Vous pouvez utiliser:

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

mais je préfère utiliser directement:

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

Cela suppose que:

  1. Le nœud de contexte par rapport auquel l'expression XPath est évaluée est le parent de tous les éléments tr - non représentés dans votre question.

  2. Chaque élément tr n'a qu'un seul attribut td avec l'attribut class valorisé 'name' et un seul td avec class attribut valorisé 'desc'.

179
Dimitre Novatchev

Essaie le following-sibling axe (following-sibling::td).

8
Philipp