使用PHPQuery选择带有查询字符串的URL
我想根据是否有URL属性设置为特定值的子节点来选择XML节点 我认为这段代码显示phpQuery没有正确解析URL。。。但是我可能错过了一些关于逃出= 有什么想法吗使用PHPQuery选择带有查询字符串的URL,php,phpquery,Php,Phpquery,我想根据是否有URL属性设置为特定值的子节点来选择XML节点 我认为这段代码显示phpQuery没有正确解析URL。。。但是我可能错过了一些关于逃出= 有什么想法吗 <?php include '../libs/phpQuery.php'; phpQuery::newDocumentXML(' <doc><item>item 1<link url="http://example.com" /></item> <it
<?php
include '../libs/phpQuery.php';
phpQuery::newDocumentXML('
<doc><item>item 1<link url="http://example.com" /></item>
<item>item 2<link url="http://example.com?abc" /></item>
<item>item 3<link url="http://example.com?abc=" /></item>
<item>item 4<link url="http://example.com?abc=21" /></item>
</doc>');
echo "<pre>
".
pq("link[url='http://example.com']:first")->parents('item')->xml()
."
".
pq("link[url='http://example.com?abc']:first")->parents('item')->xml()
."
".
pq("link[url='http://example.com?abc=']:first")->parents('item')->xml()
."
".
pq("link[url='http://example.com?abc=21']:first")->parents('item')->xml()
."
</pre>";
?>
$value = null;
list($attr, $value) = explode('=', $attr);
$value = trim($value, "'\"");
第749行附近的phpQuery/phpQueryObject.html中的
使用
因此,第二个“=”和后面的所有内容都将丢失(分解为未捕获的第三个值)。我把这个改成了
它有点(非常)naff,但它适用于我的应用程序
注意,键是从“parse”值中提取的,然后该值是字符串的剩余部分 我同意这表明phpQuery工作不正常,但您也可能对:first
应该做什么感到困惑“first”的目的是获得匹配的第一个链接(以防有重复链接)。我已经更改了链接的顺序,以查看phpQuery是否在最初的解析中出错(并且所有链接在内部都是相同的)或者在以后的搜索中失败(似乎是搜索失败了)。这不是first将实现的吗?在css规范中,这实际上不是很清楚,但我相信:first应该匹配第一个li,无论它匹配与否。因此,如果第一个li不匹配,它可能不会返回任何内容。有更好的方法来获得第一个匹配。嗨-我做了更多的测试-使用重复的URL,:first和:last正如我所期望的那样工作(让我们向右看)。不清楚phpquery的哪个分支是最新的-所以我想我必须自己调试它…我只是自己测试了它,我的phpquery与这些选择器不匹配。在您的示例中,所有四个链接都是:first
和:last
以及:独生子女
,您知道为什么吗?
$value = null;
list($attr, $value) = explode('=', $attr);
$value = trim($value, "'\"");
// attr with specifed value
if (mb_strpos($s, '=')) {
$value = null;
$raw = $attr;
parse_str($raw,$ary);
$attr = current(array_keys($ary));
$value = substr($raw,strlen($attr)+1);
$value = trim($value, "'\"");