Cómo seleccionar la siguiente etiqueta sibling / xml usando xpath


Tengo un archivo HTML (de Newegg) y su HTML está organizado como a continuación. Todos los datos en su tabla de especificaciones son " desc", mientras que los títulos de cada sección están en " nombre. ' A continuación hay dos ejemplos de datos de las páginas de 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>

Al final me gustaría tener una clase para una CPU (que ya está configurada) que consiste en una Marca, Serie, Núcleos y tipo de socket para almacenar cada uno de los datos. Esta es la única manera que se me ocurre para hacer esto:

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

Y haciendo esto para el resto de los valores. ¿Cómo lograría el siguiente logro y hay una manera más fácil de hacer esto?

Author: abatishchev, 2010-06-29

2 answers

¿Cómo lograría el siguiente y hay una manera más fácil de hacer ¿esto?

Puedes usar:

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

Pero prefiero usar directamente :

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

Esto supone que:

  1. El nodo de contexto contra el que se evalúa la expresión XPath es el padre de todos los elementos tr not que no se muestran en la pregunta.

  2. Cada elemento tr tiene solo un td con class atributo valorado 'name' y solo uno td con class atributo valorado 'desc'.

 165
Author: Dimitre Novatchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-29 13:01:16

Intente el eje following-sibling (following-sibling::td).

 6
Author: Philipp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-29 09:32:54