我正在使用PHP QueryPath库从旧的HTML文件集合中提取数据,并且大部分都使用通过find()函数提供的CSS选择器来提取数据。但是,并非所有包含我需要提取的数据的元素都具有唯一的CSS标识符,所以我一直在使用Regexp和QueryPath的丑陋组合来提取数据。
<ul class="list><li>Data1</li><li>Data2</li></ul>
例如,我如何从此列表元素中干净地提取“Data2”?是否有一个QueryPath函数可以让我指定,例如,父元素的第二个子元素作为要检索的元素?
答案 0 :(得分:3)
实际上有几种方法可以做到这一点。最简单的方法是使用CSS 3 pseduclass :nth-of-type()
。这直接在UL中获得第二个LI:
qp($html, 'ul>li:nth-of-type(2)');
:nth-of-type
和其他CSS 3选择器采用所谓的“an + b”规则,您可以在其中说明组成一个项目的数量,然后说出您想要的组中的哪个项目。例如,tr:nth-of-type(4n+2)
会将表行拆分为4个组,然后返回每个组中的第二个元素。 :even
和:odd
只是2n
和2n+1
的简写。
可能值得研究的其他CSS:
您还可以获取所有LI元素,然后获取第二个元素:
qp($html, 'li')->eq(2);
或者,正如之前的海报指出的那样,您可以使用DOMNode
获取第二个对象的实际get()
对象:
qp($html, 'li')->get(2);
如果您有非常复杂的需求,可以使用filter()
获取列表,并通过自定义函数运行它。
答案 1 :(得分:1)
要获取第n个匹配的对象,您可以使用QueryPath::get(n-1)
。