Php 创建多个Xpath查询的数组
我已经看到,可以从两个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
|
分割:
$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
)
)
)
我的问题:
作为第一个示例,您的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
)
)
)