【问题标题】:PHP DOMXPath gives empty string for /@IDPHP DOMXPath 为 /@ID 提供空字符串
【发布时间】:2014-11-14 23:08:36
【问题描述】:

简化的 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“orderTableSorted:orderTable:10:j_id504”。

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

【问题讨论】:

    标签: php html dom xpath


    【解决方案1】:

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

    路径表达式末尾的小写 ID

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

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

    【讨论】:

    • 实际上在 Xpath 检查器中,/@ID 和 /@id 都有效。但是您的解决方案成功了,非常感谢!
    • 那么,在我看来,您应该考虑向 Firebug 开发人员提交错误。
    • 仅供参考:当您使用DOMDocument::loadHTML() 时,PHP 的 DOMDocument 处于 HTML 模式,元素和属性名称不区分大小写。那么DOMXPath 也是如此。
    • @hakre 感谢您提供此信息!但后来我认为我不明白为什么小写 id “成功了”,正如 user3523440 所说。另外,如果 DOMDocument 不区分大小写,为什么你确定 DOMXPath 也是?
    • 我必须纠正一下自己:xpath 表达式需要用小写的元素和属性名称编写。目前正在玩这个。只需检查 HTML 元素和属性名称中的大小写以及无关紧要的大小写。这也是它不适用于@ID 的原因。 Firefox xpath 的大小写可能更宽松。
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多