PHP DOMXPath为/ @ID提供空字符串

时间:2014-09-20 13:44:54

标签: php html dom xpath

简化的HTML

<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 Checker,它返回ID&#34; orderTableSorted:orderTable: 10 :j_id504&#34;我需要找到。

非常感谢任何正确方向的帮助。

1 个答案:

答案 0 :(得分:1)

XPath是一种区分大小写的语言。因此,idID完全不同。在您的HTML示例中,a元素具有属性id,但没有一个称为ID。这就是为什么查询不会产生任何结果的原因。

路径表达式最末端的小写ID

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

我怀疑Firebug在实际的HTML中没有返回大写的ID