2016-03-31 12 views
1

HTMLタグの内容を取得するためのXPath式を作成するのに役立つクローラライブラリを使用しています。私は現在、ページからHTML5コンテンツを読み込んでいます。このようにしてタグに挿入されていないテキストを取得したいとします。 別の子要素の後にXPathを使用して子テキストを選択する方法

<div class="country"> 
    <strong> USA </strong> 
     Some text here 
</div> 

は、だから私はここにこのテキスト にいくつかのテキストを取得しようとしているが、クローラライブラリは、タグにだとないその外側だけでものを手に入れることができます。

これらは、クローラの一部です:

$crawler = new Crawler(); 
$crawler->xpathSingle($xml, '//div[@class="country"]/strong/@text'); 
+1

XPath: '// div [@ class =" country "]/strong/following-sibling :: text()'を実行するとどうなりますか?私はこの "クローラー"ライブラリに慣れていないので質問します。このXPathはPythonでlxmlを使って動作します。 –

+0

ありがとう、それは働いている。しかし、このテキストが別のタグに属していても、強力なタグの後ろのすべてのテキストを取得しています – KubiRoazhon

答えて

1

要求に応じてこれらのXPathのどちらかが"Some text here"を返します。

  • normalize-space(substring-after(//div[@class="country"], 'USA'))

  • normalize-space(//div[@class="country"]/strong/following-sibling::text())

を10

ご希望のバリエーションに基づいて選択してください。

クレジット:第二の例は、第@Keith Hallによってcommentてなさ提案由来します。


更新

私はあなたが収容したいの変化に基づいて、あなたのXPathを選択する必要があります述べたように。上述した第2のXPathを使用して、要求されたが、ちょうど最初に以下のテキストノードつかむよう

<div class="country"> 
    <strong> USA </strong> 
     Some text here 
    <i>Do not want this text</i> 
</div> 

あなたは"Do not want this text"を除外し、"Some text here"を返すことができます:

  • normalize-space(//div[@class="country"]/strong/following-sibling::text()[1])
  • を否や、私はあなたが変化に遭遇したよりも、投稿しませんでした
+0

これは第2のものです。最初のものは「USA」を返します。助けを借りてくれてありがとう – KubiRoazhon

+0

しかし、このテキストが別のタグに属していても、強力なタグの後ろにすべてのテキストが表示されています – KubiRoazhon

+0

もう1つは役に立ちましたが、最初のものは '' USA ''を返しません。要求されたときに ''ここにいくつかのテキスト ''を返します。 'strong'の後に余りに多くのテキストを得ることについては、あなたの例ではそのような場合は表示されませんでしたが、最初のテキストノードを' [0] 'で取得することで2番目のXPathを適合させることができます。私はあなたにあなたの答えを更新することができます... – kjhughes

関連する問題