我正在使用PHP库从一组旧的QueryPath文件中提取数据,并且在很大程度上一直使用通过find()函数提供的CSS选择器来提取数据。但是,并不是所有包含我需要提取的数据的元素都有惟一的CSS标识符,所以我一直在使用Regexp和QueryPath的丑陋组合来提取数据。
<ul class="list><li>Data1</li><li>Data2</li></ul>例如,我如何从这个列表元素中干净地提取"Data2“?有没有一个QueryPath函数可以让我指定一个父元素的第二个子元素作为要检索的元素?
发布于 2011-03-24 11:06:16
要获得第n个匹配的对象,可以使用QueryPath::get(n-1)。
发布于 2012-05-23 21:32:06
实际上,有几种方法可以做到这一点。最简单的方法是使用CSS3pseduclass :nth-of-type()。这将直接在UL中获取第二个LI:
qp($html, 'ul>li:nth-of-type(2)');:nth-of-type和其他CSS3选择器采用的是所谓的"an+b“规则,你可以说出一个组中有多少个项目,然后再说出你想要的组中的哪个项目。例如,tr:nth-of-type(4n+2)会将表行分成4个一组,然后返回每组中的第二个元素。:even和:odd只是2n和2n+1的缩写。
其他可能值得研究的CSS:
您还可以获取所有LI元素,然后只获取第二个元素:
qp($html, 'li')->eq(2);或者,正如前面的帖子所指出的那样,您可以使用get()获取第二个对象的实际DOMNode对象
qp($html, 'li')->get(2);如果您有非常复杂的需求,您可以使用filter()获取一个列表,并通过一个自定义函数运行它。
https://stackoverflow.com/questions/5414269
复制相似问题