web-dev-qa-db-ja.com

xpathを使用して次のsibling / xmlタグを選択する方法

HTMLファイル(Neweggから)があり、そのHTMLは次のように構成されています。仕様表のデータはすべて「desc」ですが、各セクションのタイトルは「name。」です。以下は、Neweggページのデータの2つの例です。

<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(既にセットアップされている)のクラスが必要です。これは私がこれを行うことについて考えることができる唯一の方法です:

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

そして、残りの値に対してこれを行います。次の兄弟をどのように達成しますか?これを行う簡単な方法はありますか?

86
Corey Farwell

次の兄弟をどのように達成しますか?これを行う簡単な方法はありますか?

使用できます

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

ただし、直接使用したい

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

これは仮定

  1. XPath式が評価されるコンテキストノードは、すべてのtr要素の親であり、質問には示されていません。

  2. tr要素には、td属性値が'name'であるclasstd属性値が'desc'であるclassが1つだけあります。

179

following-sibling軸(following-sibling::td)を試してください。

8
Philipp