2014-09-20 44 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