PHP如何合并2个查询
我有以下两个问题:PHP如何合并2个查询,php,xml,dom,xpath,xpath-2.0,Php,Xml,Dom,Xpath,Xpath 2.0,我有以下两个问题: 1)获取图像的所有URL: $imgs = $xpath->query('//div[@class="pin"]/div[@class="PinHolder"]/a/img'); foreach($xpath->query('//span[@class="LikesCount"]') as $span) { $int = (int) $span->nodeValue; if ($int > 5) { echo $i++
1)获取图像的所有URL:
$imgs = $xpath->query('//div[@class="pin"]/div[@class="PinHolder"]/a/img');
foreach($xpath->query('//span[@class="LikesCount"]') as $span) {
$int = (int) $span->nodeValue;
if ($int > 5) {
echo $i++ . "--> " . $int . "<br />";
}
}
2)获取facebook喜欢每张图片的人数:
$imgs = $xpath->query('//div[@class="pin"]/div[@class="PinHolder"]/a/img');
foreach($xpath->query('//span[@class="LikesCount"]') as $span) {
$int = (int) $span->nodeValue;
if ($int > 5) {
echo $i++ . "--> " . $int . "<br />";
}
}
foreach($xpath->query('//span[@class=“likescont”]”)作为$span){
$int=(int)$span->nodeValue;
如果($int>5){
echo$i++.“-->.”$int.“
”;
}
}
我想将它们合并,以获得facebook喜欢超过5次的图像 也就是说,不受欢迎的图片根本就没有LikeCount类 下面是标记的一个示例:
<div class="pin">
[...]
<a href="/pin/56787645270909880/" class="PinImage ImgLink">
<img src="http://media-cache-ec3.pinterest.com/upload/56787645270909880_d7AaHYHA_b.jpg"
alt="Krizia"
data-componenttype="MODAL_PIN"
class="PinImageImg"
style="height: 288px;">
</a>
<p class="stats colorless">
<span class="LikesCount">
22 likes
</span>
<span class="RepinsCount">
6 repins
</span>
</p>
[...]
</div>
[...]
22喜欢
6列宾
[...]
要检索的不是所有图像,而是likes计数为5或更多的图像,我会尝试将赋值中的XPath表达式更改为$imgs
,如下所示:
//div[@class="pin"]
[.//span[@class = 'LikesCount']
[substring-before(normalize-space(.),' ') > 5]]
/div[@class="PinHolder"]
/a/img
(我添加了空格以使其更容易理解;如果XPath解析器在这方面不符合规范,您可能需要删除换行符[有些不符合])
我不清楚为什么cbuckley说这需要XPath2.0;也许他在这里看到了一些我没有看到的微妙问题。我已经为您正确地设置了问题的格式。你为什么老是把它恢复过来?对不起,第一天在这里。。非常感谢。请提供完整的输入XML(提供的XML不包含
div[@class=“PinHolder”]
您将需要XPath 2.0,但类似于//div[@class=“pin”]/p/span[@class=“likescoount”]][5]之前的子字符串/祖先::div[@class=“pin”]/a/img
应该可以作为一个开始。@Geo:再说一遍,你为什么要还原我的格式?我不喜欢重复我自己!谢谢你,McQueer,但我仍然不知道如何打印/处理xpath的输出。它是数组、单个字符串还是DOM元素?我到底在搞什么鬼:D和这个查询-->//span[@class=“likescoount”][规范化空间()]从XPath的角度来看,我给出的XPath表达式对XML文档中的一组节点求值。给定的编程语言和库对它们使用的表示形式取决于它们,而不是XPath。上面说,如果您知道如何处理现有的在查询时,您应该知道如何处理重新格式化的查询结果。(如果不知道,您似乎对PHP的DOM库有疑问,而不是XPath。)表达式//span[@class='likescoount']
将每个span
元素与值为“likescoount
的属性相匹配。添加谓词[normalize space(.)]
将结果进一步限制为表达式对其规范化空格(.)的span
元素
的计算结果为true。因此,谓词具有过滤掉任何空的或只包含空格的span
元素的效果。注意,返回的值规范化空格(.)
用于计算谓词,然后将其丢弃:它对返回的DOM节点没有任何影响。丢弃???这就是为什么我会抓狂,我没有得到它!因此,如果我想计算“规范化”值,我必须1)在xpath查询中对其求值,或者2)在php中对其求值,再次手动去除空白!谢谢你,McQueenIt当然可以编写一个xpath表达式,其求值结果为规范化值(从而将规范化值返回给调用者),但不是在将其包装到谓词中时。如果这感觉很棘手,您可能会受益于对XPath的良好介绍。