it-swarm.com.de

So wählen Sie das folgende Geschwister- / XML-Tag mit xpath aus

Ich habe eine HTML-Datei (von Newegg) und deren HTML ist wie folgt organisiert. Alle Daten in der Spezifikationstabelle lauten 'desc', während die Titel der einzelnen Abschnitte in 'name.' angegeben sind. Nachfolgend sind zwei Datenbeispiele von Newegg-Seiten aufgeführt.

<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>

Am Ende hätte ich gerne eine Klasse für eine CPU (die bereits eingerichtet ist), die aus einem Brand-, Series-, Core- und Socket-Typ besteht, um die einzelnen Daten zu speichern. Dies ist der einzige Weg, den ich mir vorstellen kann, um dies zu tun:

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

Und das für den Rest der Werte. Wie würde ich das nächste Geschwister erreichen und gibt es einen einfacheren Weg, dies zu tun?

86
Corey Farwell

Wie würde ich das nächste Geschwister erreichen und gibt es einen einfacheren Weg, dies zu tun?

Sie können verwenden:

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

aber ich würde lieber direkt verwenden:

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

Dies setzt voraus, dass:

  1. Der Kontextknoten, anhand dessen der XPath-Ausdruck ausgewertet wird, ist das übergeordnete Element aller tr -Elemente, die in Ihrer Frage nicht angezeigt werden.

  2. Jedes tr Element hat nur ein td mit class Attributwert 'name' und nur ein td mit class Attributwert 'desc'.

179

Probieren Sie das following-sibling Achse (following-sibling::td).

8
Philipp