2017-02-27 26 views
0

Ich habe eine Tabelle mit td wie dieseWie komme ich zwischen zwei br-Tags in XPath?

<td> 
    <span> Washington US <br>98101 Times Square</span> 
</td> 

ich alle Elemente in der Seite bekommen, aber ich muss separat diese beiden Werte erhalten. Wenn das nicht möglich ist würde ich gerne bekommen 98101 Times Square

Ich habe versucht, etwas wie string(//tr[3]//td[2])/ zu tun, aber alles, was ich bekomme, ist der zwei Text miteinander verbunden.

Antwort

1

Sie können den Text untergeordneten Knoten im span Element wählen mit span/text() so geposteten Pfad der span Sie enthält //tr[3]//td[2]/span/text() wollen die td Annahme auswählt. Hier

ist ein Beispiel:

$html = <<<EOD 
<html> 
    <body> 
    <table> 
    <tr> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td>2</td> 
    </tr> 
    <tr> 
    <td>3,1</td> 
    <td> 
    <span> Washington US <br>98101 Times Square</span> 
</td> 
</tr> 
</body> 
</html> 

EOD; 

$doc = new DOMDocument(); 
$doc->loadHTML($html); 

$xpath = new DOMXPath($doc); 


$textNodes = $xpath->query('//tr[3]//td[2]/span/text()'); 

foreach ($textNodes as $text) { 
    echo $text->textContent . "\n"; 
} 

Ausgänge

Washington US 
98101 Times Square 
+0

Aber es gibt nur einen Bereich, wie wähle ich Eltern/Kind? –

+0

@mvrht, ich verstehe nicht, warum ein einzelner Bereich ein Problem mit dem vorgeschlagenen Pfad ist. Ich habe ein Code-Snippet hinzugefügt, vielleicht hilft das. –

+0

Mein schlechtes. Ich dachte, ich müsste nicht foreach machen. Ich nahm an, der XPath würde sich teilen und es als Array zurückgeben –

1

Versuchen

td/span/node()[1] 

und

td/span/node()[3] 

Oder

td/span/text()[1] 
td/span/text()[2]