XPath PHP解析问题-空

时间:2018-08-13 15:54:36

标签: php parsing xpath

所以我尝试了所有方法,但是没有运气。

如果我像/ html / head / title或使用类名那样调用XPATH,则会得到结果。 我的HTML不包含可用于HTML文件中所需数据的任何特殊类或ID的问题。

我的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ÝPISZ LISTUVLASTNÍCTVAč。 7259

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

1 个答案:

答案 0 :(得分:2)

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

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

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