所以我尝试了所有方法,但是没有运气。
如果我像/ 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
有人可以指出正确的方向吗,这可能是什么问题? 谢谢。
答案 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
,而不是第二个。