Php 创建多个Xpath查询的数组

Php 创建多个Xpath查询的数组,php,xpath,Php,Xpath,我已经看到,可以从两个xpath查询生成一个数组,如下所示: 但是,如果一个查询有两个以上的查询,在我的例子中是六个查询,那又如何呢?作为多个查询,用|分割: $data = $xpath->query("//li[contains(@class, 'cmil_header')]/span[contains(@class, 'cmil_salong')] | //li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmi

我已经看到,可以从两个xpath查询生成一个数组,如下所示:

但是,如果一个查询有两个以上的查询,在我的例子中是六个查询,那又如何呢?作为多个查询,用
|
分割:

$data = $xpath->query("//li[contains(@class, 'cmil_header')]/span[contains(@class, 'cmil_salong')] | 
//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_time')] | 
//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_versions')]/div[contains(@class, 'mv_3d')] | 
//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_versions')]/div[contains(@class, 'mv_txt')] | 
//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_rs')] | 
//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_btn')]/a[contains(@class, 'smallYellowBtn smallBtn')]/@href");
或按如下方式划分:

$title = $xpath->query("//li[contains(@class, 'cmil_header')]/span[contains(@class, 'cmil_salong')]");
$time = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_time')]");
$threed = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_versions')]/div[contains(@class, 'mv_3d')]");
$textad = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_versions')]/div[contains(@class, 'mv_txt')]");
$freeseats = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_rs')]");
$href = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_btn')]/a[contains(@class, 'smallYellowBtn smallBtn')]/@href");
一个简单的解决方案(不是很好)是迭代每个结果,然后将数组合并为一个。但是,如果查询返回
empty/NULL
,则可能会混合结果

一个好的最终结果是:

stdClass Object
(
    [movie] => Array
        (
            [0] => stdClass Object
                (
                    [title] => Example ONE
                    [time] => 11:30
                    [threed] => 0
                    [textad] => 1
                    [freeseats] => 244
                    [href] => http://example.com/1
                )
            [1] => stdClass Object
                (
                    [title] => Example Two
                    [time] => 21:00
                    [threed] => 1
                    [textad] => 1
                    [freeseats] => 100
                    [href] => 0
                )
        )
)
我的问题:
  • 如何将多个Xpath查询的结果添加到stdClass中

  • 作为第一个示例,您的6路Xpath查询似乎使用了完全不同的XML模式。您能否提供一个XML示例,以便我们可以使用它?第一个查询来自youtube rss示例,第二个六个查询用于HTML页面。youtube示例之所以有效,是因为这两个查询的结果始终存在1:1的关系。但如果没有,这是一个不好的模式。在我看来,你最好换一种方式思考,这样你的结果才会更有条理。例如,首先找到剧院。反复浏览,找到与每个特定剧院相关的节目。然后浏览这些内容,并获得每个特定节目的详细信息等。这样,如果某个特定节目缺少某些信息,则无关紧要,因为您有一个工作环境。请提供XML或HTML示例。@KeithHall感谢您的评论。我一直在看你给我的另一个答案,我一直在谷歌上搜索,试图按照你说的去做。但不幸的是,我不能,您建议我怎么做?您的6路Xpath查询似乎将一个完全不同的XML模式作为第一个示例。您能否提供一个XML示例,以便我们可以使用它?第一个查询来自youtube rss示例,第二个六个查询用于HTML页面。youtube示例之所以有效,是因为这两个查询的结果始终存在1:1的关系。但如果没有,这是一个不好的模式。在我看来,你最好换一种方式思考,这样你的结果才会更有条理。例如,首先找到剧院。反复浏览,找到与每个特定剧院相关的节目。然后浏览这些内容,并获得每个特定节目的详细信息等。这样,如果某个特定节目缺少某些信息,则无关紧要,因为您有一个工作环境。请提供XML或HTML示例。@KeithHall感谢您的评论。我一直在看你给我的另一个答案,我一直在谷歌上搜索,试图按照你说的去做。但不幸的是我不能,你建议我怎么做?
    $title = $xpath->query("//li[contains(@class, 'cmil_header')]/span[contains(@class, 'cmil_salong')]");
    $time = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_time')]");
    $threed = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_versions')]/div[contains(@class, 'mv_3d')]");
    $textad = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_versions')]/div[contains(@class, 'mv_txt')]");
    $freeseats = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_rs')]");
    $href = $xpath->query("//li[contains(@class, 'selectShowRow')]/div[contains(@class, 'cmil_btn')]/a[contains(@class, 'smallYellowBtn smallBtn')]/@href");
    
    stdClass Object
    (
        [movie] => Array
            (
                [0] => stdClass Object
                    (
                        [title] => Example ONE
                        [time] => 11:30
                        [threed] => 0
                        [textad] => 1
                        [freeseats] => 244
                        [href] => http://example.com/1
                    )
                [1] => stdClass Object
                    (
                        [title] => Example Two
                        [time] => 21:00
                        [threed] => 1
                        [textad] => 1
                        [freeseats] => 100
                        [href] => 0
                    )
            )
    )