PHP如何从每个HTML列表项中获取子元素
在PHP中对单个DOM列表项(LI)执行XPath查询
你不需要转换$LIList->item($LI)的格式,直接将它作为上下文节点传入DOMXPath的query()方法即可。DOMXPath的query()方法支持第二个参数,用于指定查询的上下文范围,这样就能在单个LI元素内部执行XPath查询。
修改后的代码示例
$xpath = new DomXPath($doc); .... // 获取所有class为mw-contributions-list的UL列表 $ULList = $xpath->query("//ul[@class='mw-contributions-list']"); // 遍历每个UL列表 for ($UL = 0; $UL < $ULList->length; $UL++) { // 获取当前UL下的所有LI元素 $LIList = $ULList->item($UL)->getElementsByTagName("li"); // 遍历每个LI元素 for ($LI = 0; $LI < $LIList->length; $LI++) { $currentLI = $LIList->item($LI); // 以当前LI为上下文节点,查询内部所有锚点链接 $anchorLinks = $xpath->query(".//a", $currentLI); // 遍历获取到的锚点链接,提取信息 for ($a = 0; $a < $anchorLinks->length; $a++) { $link = $anchorLinks->item($a); $linkText = $link->nodeValue; // 获取链接文本 $linkHref = $link->getAttribute("href"); // 获取链接地址 // 此处添加你的后续处理逻辑 } .... } }
关键说明
- 上下文节点参数:
query()的第二个参数限定了查询范围,只会在传入的$currentLI元素内部查找匹配节点,避免全局查询干扰。 - XPath表达式中的
.:表示从当前上下文节点开始查找,比如.//a会匹配当前LI下所有层级的<a>元素,而非整个文档中的链接。
内容的提问来源于stack exchange,提问作者Cotta1000
相关产品推荐
相关产品推荐

