2013-10-09 25 views
8

Ho visto domande simili, ma le soluzioni che ho visto non funzioneranno su quanto segue. Sono lontano da un esperto di XPath. Ho solo bisogno di analizzare un po 'di HTML. Come posso selezionare la tabella che segue l'intestazione 2. Ho pensato che la mia soluzione di seguito dovrebbe funzionare, ma apparentemente no. Qualcuno può aiutarmi qui?usando xpath per selezionare un elemento dopo l'altro

content = """<div> 
<p><b>Header 1</b></p> 
<p><b>Header 2</b><br></p> 
<table> 
<tr> 
    <td>Something</td> 
</tr> 
</table> 
</div> 
""" 

from lxml import etree 
tree = etree.HTML(content) 
tree.xpath("//table/following::p/b[text()='Header 2']") 

risposta

8

È necessario utilizzare il sotto XPATH 1.0 utilizzando l'Assi preceding.

//table[preceding::p[1]/b[.='Header 2']] 
+0

Ah, ok. Grazie per il codice e il collegamento dei documenti. Questo è utile. – jseabold

10

Alcune alternative a @ risposta di Arup:

tree.xpath("//p[b='Header 2']/following-sibling::table[1]") 

selezionare il primo table fratello in seguito alla p contenente la b intestazione contenente "Intestazione 2"

tree.xpath("//b[.='Header 2']/following::table[1]") 

selezionare il primo table in ordine del documento dopo lo b contenente "Intestazione 2"

Vedi XPath 1.0 specifications per dettagli sui diversi assi:

  • all'asse seguente contiene tutti i nodi nello stesso documento come nodo di contesto che sono secondo il nodo del contesto in ordine documento, escluse eventuali discendenti ed escludendo i nodi di attributi e nodi di namespace

  • il successivo fratello asse contiene tutti i seguenti fratelli del nodo di contesto; se il nodo del contesto è un nodo nodo attributo o spazio, l'asse slave-sibling è vuoto

Problemi correlati