2013-06-29 104 views
-2

我想知道是否有方法讓XPath返回特定元素的HTML?XPath查詢返回HTML

<td> 
1212 S.W. 123 St. 
<br> 
Flower, Maryland 11234 
<br> 
United States 
</td> 

XPath查詢:

string(//table[@cellspacing='10']/tr[2]/td[2]) 

電流輸出

1212 S.W. 123 St.Flower, Maryland 11234United States 

所需的輸出:

1212 S.W. 123 St.<br>Flower, Maryland 11234<br>United States

+0

請提供參考證明xpath應該如何通過它的規範返回一個這樣的字符串。除非你願意,我可以自由地處理與你*嘗試*做的事情有關的文檔副本。 – hakre

回答

1

您所要求的字符串,所以你正在獲取一個字符串。如果你只是想要節點,只需地址表數據元素的子節點:

table[@cellspacing='10']/tr[2]/td[2]/node() 

...你將得到文本和元素節點。

如果您使用的是XSLT,請不要使用<xsl:value-of>,因爲這也會給您一個字符串,請使用<xsl:copy-of>來獲取節點。儘管我懷疑你沒有使用XSLT,因爲你不能將HTML輸入到XSLT過程中。

+0

感謝您的回覆。這種方法不適合我。返回的結果與我從原始帖子中的xPath查詢中刪除'string()'調用相同。我正在嘗試獲取內部HTML ...我正在使用PHP,並且還可以訪問google文檔'importXML()'。 – AnchovyLegend

+0

然後我不能幫你,對不起。我知道我給你的XPath地址解決了節點問題,因此使用XPath的語言需要在節點上執行,而不是字符串。我不熟悉在PHP中使用'importXML()'。我希望別人能幫助你。 –

0

這不是一個XPath問題,更多的是PHP問題。你並沒有真正說出你正在使用什麼來運行你的XPath,但是我將假設你正在解析HTML。

下面是獲取元素內部內容所需的代碼。請注意,一旦找到節點,您需要撥打nodeValue以獲取它下面的所有內容。

<?php 

$html = <<<HTML 
<table> 
    <tr> 
     <td> 
      1212 S.W. 123 St. 
      <br> 
      Flower, Maryland 11234 
      <br> 
      United States 
     </td> 
    <tr> 
</table> 
HTML; 
$dom = new DOMDocument; 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('//table/tr/td'); 

foreach($nodes as $node) { 
    echo $node->nodeValue; 
} 

?>