php - 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
有人可以指出我正确的方向可能是什么问题?谢谢。
解决方案
您的代码存在一些问题,但主要问题是您引用了tbody
HTML 文件中不存在的 a。tbody
当它丢失时,浏览器会自动将 a插入到 DOM 中,但 PHPDOMDocument
不会这样做。其次,DOMXPath::query()
将始终返回一个节点列表,而您似乎想要文本内容,因此您可以DOMXPath::evaluate()
改用:
$okres = $x->evaluate('string(//table[1]/tr[1]/td[4]/text())');
顺便说一句,我需要提醒自己 XPath 中的偏移量/索引是基于 1 而不是基于 0。所以在上面的表达式中,我们正在寻找第一个table
,而不是第二个。
推荐阅读
- php - 从PHP(Laravel)中另一个数组中的数组中删除一些键
- javascript - 网络音频 api 和嵌套函数
- python - 将日期对象的数据框转换为日期时间
- binary - 这表示它有两个 2 位输入,所以如何找到真值表
- java - 尝试通过 SSH 隧道连接 PostgreSQL 时连接尝试失败。我将 Java 与 jsch lib 一起使用
- react-native - react-native-fs - 错误:尝试在空对象引用上调用虚拟方法'byte [] java.lang.String.getBytes()'
- vert.x - 增加 vetx 服务器的超时时间
- reactjs - 在 setState 和 useState 之后,history.push 不起作用
- python - 遇到错误:启动 Jupyter 笔记本时没有名为“编码”的模块
- python - 如何通过电子邮件邀请链接邀请用户加入群组?