2016-03-31 12 views
1

HTML etiketlerinin içeriğini almak için bazı XPath ifadeleri oluşturmanıza yardımcı olan Tarayıcı kütüphanesini kullanıyorum. Şu anda bir sayfadan bir HTML5 içeriği okuyorum ve bu şekilde bir etikete eklenmeyen bir metni almak istiyorum. Başka bir alt öğe öğesinden sonra alt metni seçmek için XPath nasıl kullanılır

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

Yani burada bu metni Bazı metni almaya çalışıyorum ama paletli kütüphane, bir etikette olduğunu ve bunun dışına sadece ne ulaşmasını sağlar.

Herhangi bir alternatif lütfen. istendiği gibi

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

ve bu XPath'i denerseniz ne olur ?: // div [@ class = "country"]/strong/following-sibling :: text() '? Bu "Crawler" kütüphanesine aşina olmadığım için soruyorum - bu XPath'in python'da lxml kullanarak çalıştığını biliyorum. –

+0

Teşekkürler dostum, çalışıyor. Ancak bu metin, başka bir etikete ait olsa bile, güçlü etiketin ardından tüm metni alıyor – KubiRoazhon

cevap

1

bu XPaths Ya "Some text here" dönecektir:

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

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

Bu

Paletli parçası 10

Düzenlemek istediğiniz varyasyon çeşitlerini temel alarak seçin.

Kredi: İkinci bir örnek ilk @Keith Hall tarafından comment yapılan öneri elde edilir.


Güncelleme:

Ben size karşılamak isteyen varyasyonlar dayalı XPath seçmek gerekir belirtildiği gibi. Yukarıdaki ikinci XPath kullanılarak istenen ama sadece ilk aşağıdaki metin düğümü kapmak olarak

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

Sen "Do not want this text" dışlamak ve "Some text here" döndürebilir:

  • normalize-space(//div[@class="country"]/strong/following-sibling::text()[1])
  • hayır erken Bir varyasyonu karşılaşmışsınızdır sonrası yaptım
+0

Bu, bir öncüdür. İlki 'ABD'yi döndürür. – KubiRoazhon

+0

Yardım için ahbap teşekkürler Ama bu metin başka etiketlere ait olsa bile güçlü etiket sonra tüm metni alma – KubiRoazhon

+0

Ikinci bir yardımcı, ama ilk "' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' döndürmeyeceğine dikkat edin; İstenildiği gibi '' Burada bazı metin '' döndürür. 'Strong' den sonra çok fazla metin almayla ilgili olarak, örneğiniz böyle bir durumu göstermedi, ancak ikinci [0] 'ile ilk metin düğümünü kapatarak ikinci XPath'ı uyarlayabilirsiniz. Size göstermesi için cevabı güncelleyebilirim ... – kjhughes

İlgili konular