1. ホーム
  2. xml

[解決済み] XPathを使用して、次の兄弟/XMLタグを選択する方法

2022-10-10 05:47:14

質問

NeweggのHTMLファイルがあり、そのHTMLは以下のように構成されています。 その仕様テーブルのすべてのデータは、' desc '、各セクションのタイトルは' という名前で表示されます。 ' 以下は、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

そして、残りの値に対してこれを行う。どのようにしてnextsiblingを達成するのでしょうか、また、もっと簡単な方法はないのでしょうか?

どのように解決するのですか?

どのようにすれば、nextsibling をどのように実現するのでしょうか、また、より簡単な方法はありますか? 簡単な方法はありますか?

を使用することができます。 :

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

を使いたいが、直接 :

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

これは、以下のように仮定しています。 :

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

  2. それぞれ tr 要素には1つだけ tdclass 属性は 'name' で、1つだけ tdclass 属性は 'desc' .