Как выбрать следующий тег 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>
В конце я хотел бы иметь класс для CPU (который уже настроен), который состоит из типа Brand, Series, Cores и Socket для хранения каждой из данных. Это единственный способ, который я могу придумать для этого:
if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
И сделаем это для остальных значений. Как бы я выполнил следующую процедуру, и есть ли более простой способ сделать это?
Ответы
Ответ 1
Как я могу выполнить следующее и есть ли более простой способ сделать это?
Вы можете использовать:
tr/td[@class='name']/following-sibling::td
, но я бы предпочел использовать напрямую:
tr[td[@class='name'] ='Brand']/td[@class='desc']
Предполагается, что:
-
Контекст node, против которого оценивается выражение XPath, является родительским элементом всех элементов tr
- не отображается в вашем вопросе.
-
Каждый элемент tr
имеет только один td
с атрибутом class
value 'name'
и только один td
с атрибутом class
value 'desc'
.
Ответ 2
Попробуйте ось following-sibling
(following-sibling::td
).