Как выбрать следующий одноуровневый элемент/тег 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 и являюсь там более легким способом сделать это?

89
задан abatishchev 7 August 2015 в 06:03
поделиться

2 ответа

Как бы мне выполнить следующую задачу? и есть ли более простой способ сделать это?

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

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

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

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

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

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

  2. Каждый элемент tr имеет только один td с атрибутом class со значением 'name' и только одним td ] с атрибутом class со значением 'desc' .

187
ответ дан 24 November 2019 в 07:15
поделиться

Попробуйте ось следующий-брат ( следующий-брат :: td ).

8
ответ дан 24 November 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: