使用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

我想根据是否有URL属性设置为特定值的子节点来选择XML节点

我认为这段代码显示phpQuery没有正确解析URL。。。但是我可能错过了一些关于逃出=

有什么想法吗

<?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, "'\"");