首页 > 解决方案 > XPath PHP 解析问题 - 为空

问题描述

所以我尝试了每一种方法,但没有运气。

如果我像 /html/head/title 或类名一样调用 XPATH,我会得到一个结果。我的 HTML 不包含任何特殊的类或 id 的问题,我可以将其用于 HTML 文件中我需要的数据。

我的 HTML 文件: https ://slv.tipp.sk/wp-content/uploads/strazcalv/7259/7259_original.html

我想用 XPATH 从 HTML 文件中获取以下内容:

//Parse the HTML DOM element to save additional data as taxonomy
    $downloaded_html = new DOMDocument();

    $downloaded_html->loadHTMLFile($filename);

    /* error_log("HTML DOM ELEMENT");
    error_log(print_r($downloaded_html,true)); */

    $xpath = new DOMXPath($downloaded_html);


    /* error_log("XPATH ELEMENT");
    error_log(print_r($xpath,true)); */

    $okres = $xpath->query("//table[1]//tbody[1]//tr[1]//td[4]");
    $kat_uzemie = $xpath->query("/html/body/div[1]/table[1]/tbody/tr[3]/td[4]")->item(0)->textContent;
    $kodku = $xpath->query("/html/body/div[1]/table[1]/tbody/tr[3]/td[3]")->item(0)->textContent;

//Desired $okres value is Komárno
    error_log("OKRES OBJECT:");
        error_log(print_r($okres,true));
        error_log(var_dump($okres,true));
        error_log("OKRES STRING:");
        error_log($okres->item(0)->textContent);

但是所有的值都是空的,我也试过 rel XPath 和 abs XPath 没有运气。

此查询正常工作:

$okres = $xpath->query("//p[@class='black20Bold']");

结果是:VÝPIS Z LISTU VLASTNÍCTVA č。7259

有人可以指出我正确的方向可能是什么问题?谢谢。

标签: phpparsingxpath

解决方案


您的代码存在一些问题,但主要问题是您引用了tbodyHTML 文件中不存在的 a。tbody当它丢失时,浏览器会自动将 a插入到 DOM 中,但 PHPDOMDocument不会这样做。其次,DOMXPath::query()将始终返回一个节点列表,而您似乎想要文本内容,因此您可以DOMXPath::evaluate()改用:

$okres = $x->evaluate('string(//table[1]/tr[1]/td[4]/text())');

顺便说一句,我需要提醒自己 XPath 中的偏移量/索引是基于 1 而不是基于 0。所以在上面的表达式中,我们正在寻找第一个table,而不是第二个。


推荐阅读