Php Xpath查询未返回所有子项?

Php Xpath查询未返回所有子项?,php,dom,xpath,Php,Dom,Xpath,我正试图解析来自远程网页的数据。我使用curl检索它,然后使用loadHTML()创建一个DOMDocument() 我遇到了希望按类名选择的问题,并尝试了几种解决方案,但最被接受的方法似乎是使用xpath查询,我的做法如下: $classname = 'content-container-primary character-list'; $xpath = new DOMXPath($dom); $results = $xpath->query("//*[@class='" . $clas

我正试图解析来自远程网页的数据。我使用curl检索它,然后使用loadHTML()创建一个DOMDocument()

我遇到了希望按类名选择的问题,并尝试了几种解决方案,但最被接受的方法似乎是使用xpath查询,我的做法如下:

$classname = 'content-container-primary character-list';
$xpath = new DOMXPath($dom);
$results = $xpath->query("//*[@class='" . $classname . "']");
这将在pastebin链接文本的第134行找到容器,该文本类似于(为清晰起见缩写):

到目前为止还不错。现在我有信心获得我想要的UL,但当我尝试:

$classname = 'media list-group-item p-a collection-char-list';
$xpathUL = new DOMXPath( $temp_dom );
$result2 = $xpathUL->query("//*[@class='" . $classname . "']");
我得到一个空结果,DOMNodeList对象([length]=>0)

我试图:

$nodes = array();
$nodes = $temp_dom->getElementsByTagName( 'li' );

foreach ( $nodes as $node ) {
    echo $node->getAttribute( "class" ).'<br>';
}
$nodes=array();
$nodes=$temp_dom->getElementsByTagName('li');
foreach($node作为$node){
echo$node->getAttribute(“类”)。
; }
其中显示了前两个LI对象,但没有显示第三个

如果我返回到原始的
$dom
对象,并使用我感兴趣的li的类名执行xpath搜索,它确实会出现在结果中

我不确定我在哪里偏离了轨道。我知道这个解决方案感觉很笨重,但就我的目的而言,它的性能已经足够好了

请注意,我无法控制远程页面的格式,必须按原样使用该格式


完整的示例可以在上找到。

我注意到在结构的中间有一个div类“row”

您可以尝试更高级的xpath查询字符串:

//*[@class='media list-group-item p-a collection-char-list']/*[@class='row']/*[@class='col-xs-6 col-sm-3 col-md-3 col-lg-2']

我注意到在结构的中间有一个div类“row”

您可以尝试更高级的xpath查询字符串:

//*[@class='media list-group-item p-a collection-char-list']/*[@class='row']/*[@class='col-xs-6 col-sm-3 col-md-3 col-lg-2']

“我想找到的是所有的“col-xs-6 col-sm-3 col-md-3 col-lg-2”类项目。”你试过这个吗
/*[@class='media list group item p-a collection char list']/*[@class='row']/*[@class='col-xs-6 col-sm-3 col-md-3 col-lg-2']
我注意到中间有一个div class行,但我不是php人,所以我无法测试您的代码。@derloopkat这正是我要找的内容,谢谢您分享。我仍然不知道为什么我发布的代码不起作用,但是如果你把你的评论移到一个答案中,我会很高兴地给你一个大的绿色复选标记。很高兴在这里,移动到回答“我想找到的是所有的”col-xs-6 col-sm-3 col-md-3 col-lg-2类项目。你试过这个吗
/*[@class='media list group item p-a collection char list']/*[@class='row']/*[@class='col-xs-6 col-sm-3 col-md-3 col-lg-2']
我注意到中间有一个div class行,但我不是php人,所以我无法测试您的代码。@derloopkat这正是我要找的内容,谢谢您分享。我仍然不知道为什么我发布的代码不起作用,但是如果你把你的评论放到一个答案中,我会很乐意给你一个绿色的大复选标记。很高兴在这里,移动到答案中
//*[@class='media list-group-item p-a collection-char-list']/*[@class='row']/*[@class='col-xs-6 col-sm-3 col-md-3 col-lg-2']