2017-02-27 346 views
0

我有一個表TD這樣如何在xpath中的兩個br標籤之間獲取?

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

我可以在頁面中的所有元素,但我需要分別獲得這兩個值。如果這是不可能的,我想以某種方式得到98101 Times Square

我曾嘗試做一些像string(//tr[3]//td[2])/但我得到的是兩個文本連接在一起。

回答

1

您可以span/text()所以假設你發佈路徑選擇td包含要//tr[3]//td[2]/span/text()span選擇在span元素的文本子節點。

下面是一個示例:

$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"; 
} 

輸出

Washington US 
98101 Times Square 
+0

但是隻有一個跨度,我該如何選擇父/子? –

+0

@mvrht,我不明白爲什麼單個跨度是我建議的路徑的問題。我已經添加了一個代碼片段,可能有幫助。 –

+0

我的不好。我以爲我不必做foreach。我認爲xpath會分割並將其作爲數組返回 –

1

嘗試

td/span/node()[1] 

td/span/node()[3] 

td/span/text()[1] 
td/span/text()[2] 
相關問題