Как выбрать следующий тег sibling / xml с помощью xpath


у меня есть HTML-файл (от Newegg) и их HTML организован, как показано ниже. Все данные в их таблице спецификаций' desc ' в то время как названия каждого раздела находятся в 'имя.' Ниже приведены два примера данных из страниц 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>

В конце концов, я хотел бы иметь класс для процессора (который уже настроен), который состоит из бренда, серии, ядер и типа сокета для хранения каждого из данных. Этот это единственный способ, который я могу придумать, чтобы сделать это:

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

и делать это для остальных значений. Как бы я выполнил nextsibling и есть ли более простой способ сделать это?

2 82

2 ответа:

каким образом я могу осуществить / / сделать и есть ли более простой способ сделать это?

вы можете использовать:

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

но я бы предпочел использовать напрямую:

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

это предполагает, что:

  1. контекстный узел, для которого вычисляется выражение XPath, является родительским для всех tr элементы, не показанные в вопрос.

  2. каждого tr элемент имеет только один td С class атрибут valued 'name' и только один td С class атрибут valued 'desc'.

попробовать following-sibling ось (following-sibling::td).