2015-08-08 50 views
0

這裏是我的代碼:DOMXpath/DOM文檔 - 如何解析HTML DOM元素,不僅有簡單的文字

$url = "https://www.leaseweb.com/dedicated-servers/single-processor"; 

libxml_use_internal_errors(true); 
$doc = new DOMDocument(); 

$doc->loadHTMLFile($url); 

$xpath = new DOMXpath($doc); 

$n = $xpath->query('//td[@data-column-name="Model"]'); 
$r = $xpath->query('//td[@data-column-name="RAM"]'); 
$l = $xpath->query('//td[@data-column-name="Location"]'); 
$item = 0; 
$i = 0; 
foreach ($n as $entry) { 
    $Name = $entry->nodeValue; 
    $RAM = $r->item($item)->nodeValue; 
    $Location = $l->item($item)->nodeValue; 
    $i++; 
    ?> 
    <tr> <td><?PHP echo $i;?></td> <td><?PHP echo $Name;?></td> <td> <?PHP echo $RAM;?> </td> <td class="hidden-xs"><?PHP echo $Location;?> </td> <td><span class="label label-success">Configure</span></td> </tr> 
    <?PHP 
    $item++; 
} 

此代碼是給我的結果只喜歡文字: 選定td元素與data-column-name="Location"例如持有<span id="inside_element">Holded text</span>,而不是得到它與span我只收到像這樣的簡單文本:Holded text

我如何獲取特定dom html元素內的HTML元素?

提前致謝!

回答

1

無論何時您需要從特定節點獲取原始HTML片段,您都必須調用DOMNode::C14N()。 該方法將節點規範化爲原始HTML字符串。讓我們在這個例子看看:

<?php 
$html = '<html> 
<head> 
</head> 
<body> 
    <div class="container"> 
     <div> 
      <span>text span</span> 
     </div> 
    </div> 
</body> 
</html>'; 

$dom = DOMDocument::loadHTML($html); 
$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('//div[@class="container"]/div'); 


print $nodes->item(0)->C14N(); 

,因爲我想div.container > div下獲得HTML內容的輸出將是::

<div> 
    <span>text span</span> 
</div> 

替代方法

有一個不太常規方法達到相同的結果。也就是說,節省了specifc HTML節點的HTML,像這樣:

$node = $nodes->item(0); 

print $node->ownerDocument->saveHTML($node); // equivalent: $nodes->C14N(); 

所以您的具體情況下,它是這樣的:

<?php 
$url = "https://www.leaseweb.com/dedicated-servers/single-processor"; 
$doc = new DOMDocument(); 
@$doc->loadHTMLFile($url); 
$xpath = new DOMXPath($doc); 
$l = $xpath->query('//td[@data-column-name="Location"]/div'); 

var_dump($l->item(0)->C14N()); 
# Or $l->item(0)->ownerDocument->saveHTML($l->item(0)); 
+0

請編輯使用'$網址你的答案=「 https://www.leaseweb.com/dedicated-servers/single-processor「;'因爲看起來我無法理解你並使其工作。提前致謝! –

+0

@TonyStark你不能閱讀PHP文檔嗎?上面解釋的方法很容易適應。解決它! – felipsmartins

+0

它似乎不與我的問題示例,我使用的網址。 –