2014-09-20 40 views
0

簡體HTMLPHP DOMXPath給出/ @ ID

<tr> 
<td class="orderOverviewAnotherColumn">0177-4066356</td> 
<a name="orderTableSorted:orderTable:10:j_id504" id="orderTableSorted:orderTable:10:j_id504" href="#"> 
</tr> 
<tr> 
<td class="orderOverviewAnotherColumn">0177-4066357</td> 
<a name="orderTableSorted:orderTable:11:j_id504" id="orderTableSorted:orderTable:11:j_id504" href="#"> 
</tr> 
<tr> 
<td class="orderOverviewAnotherColumn">0177-4066358</td> 
<a name="orderTableSorted:orderTable:12:j_id504" id="orderTableSorted:orderTable:12:j_id504" href="#"> 
</tr> 
<tr> 
<td class="orderOverviewAnotherColumn">0177-4066359</td> 
<a name="orderTableSorted:orderTable:13:j_id504" id="orderTableSorted:orderTable:13:j_id504" href="#"> 
</tr> 

在PHP中使用下面的代碼

libxml_use_internal_errors(true); 
$doc = new DOMDocument(); 
$doc->loadHTMLFile('448713409.html'); 
$xpath = new DOMXPath($doc); 
$vRes = $xpath->query(".//*[@id='orderTableSorted:orderTable:tbody_element']/tr[contains(.,'4066356')]//a[contains(@id,':j_id504')]/@ID"); 

foreach ($vRes as $obj) { 
    $clean[] = $obj->nodeValue; 
} 

$clink = implode(" ",$clean); 
var_dump($clink); 

返回空字符串...

string(0) "" 

用Firebug的Xpath檢查它返回ID「orderTableSorted:orderTable::j_id504」,我需要 找。

任何在正確的方向幫助非常感謝。

回答

1

XPath是一種區分大小寫的語言。因此,idID是完全不同的東西。在您的HTML示例中,a元素的屬性爲id,但沒有一個名稱爲ID。這就是爲什麼查詢不會產生任何結果。

小寫ID你的路徑表達式的末尾:

//a[contains(@id,':j_id504')]/@id 

我懷疑,當螢火蟲在實際的HTML有沒有返回一個大寫ID

+0

實際上在Xpath Checker中,/ @ ID和/ @ id工作。但是你的解決方案做了個伎倆,非常感謝你! – Ozanito 2014-09-20 13:58:20

+0

然後,我認爲你應該考慮向Firebug開發者提交一個bug。 – 2014-09-20 14:01:31

+0

僅供參考:當您使用DOMDocument :: loadHTML()時,PHP的** DOMDocument **處於HTML模式,元素和屬性名稱不區分大小寫。這也是'DOMXPath'。 – hakre 2014-10-12 13:09:42