【发布时间】:2015-04-11 15:15:36
【问题描述】:
我想根据它是否有一个 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>";
?>
这是回归
<pre>
item 1<link url="http://example.com"/>
item 2<link url="http://example.com?abc"/>
item 2<link url="http://example.com?abc"/>
item 2<link url="http://example.com?abc"/>
</pre>
【问题讨论】:
-
我同意这表明 phpQuery 无法正常工作,但您也可能对
:first应该做什么感到困惑 -
'first' 的目的是获取匹配的第一个链接(以防有重复)。我更改了链接的顺序以查看 phpQuery 是否在原始解析错误(并且所有链接在内部都相同)或在以后的搜索中失败(似乎是搜索失败)。这不是首先要实现的吗?
-
在css规范中实际上并不太清楚,但我认为 :first 应该匹配第一个 li,无论它是否匹配。因此,如果第一个 li 不匹配,它可能不应该返回任何内容。有更好的方法来获得第一场比赛。
-
嗨 - 我做了更多的测试 - 使用重复的 URL, :first 和 :last 按我的预期工作(只是向右)。目前尚不清楚 phpquery 的哪个分支 - 所以认为我必须自己调试它......
-
我自己测试了一下,我的 phpQuery 没有正确匹配这些选择器。在您的示例中,所有四个
link都是:first和:last以及:only-child,你明白为什么吗?