首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QueryPath获取任意HTML元素的内容

使用QueryPath获取任意HTML元素的内容
EN

Stack Overflow用户
提问于 2011-03-24 11:01:36
回答 2查看 2.2K关注 0票数 0

我正在使用PHP库从一组旧的QueryPath文件中提取数据,并且在很大程度上一直使用通过find()函数提供的CSS选择器来提取数据。但是,并不是所有包含我需要提取的数据的元素都有惟一的CSS标识符,所以我一直在使用Regexp和QueryPath的丑陋组合来提取数据。

代码语言:javascript
复制
<ul class="list><li>Data1</li><li>Data2</li></ul>

例如,我如何从这个列表元素中干净地提取"Data2“?有没有一个QueryPath函数可以让我指定一个父元素的第二个子元素作为要检索的元素?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-24 11:06:16

要获得第n个匹配的对象,可以使用QueryPath::get(n-1)

票数 1
EN

Stack Overflow用户

发布于 2012-05-23 21:32:06

实际上,有几种方法可以做到这一点。最简单的方法是使用CSS3pseduclass :nth-of-type()。这将直接在UL中获取第二个LI:

代码语言:javascript
复制
qp($html, 'ul>li:nth-of-type(2)');

:nth-of-type和其他CSS3选择器采用的是所谓的"an+b“规则,你可以说出一个组中有多少个项目,然后再说出你想要的组中的哪个项目。例如,tr:nth-of-type(4n+2)会将表行分成4个一组,然后返回每组中的第二个元素。:even:odd只是2n2n+1的缩写。

其他可能值得研究的CSS:

  • ':nth'
  • ':first-of-type',':first'
  • ':last-of-type',':last'
  • ':even',':odd'
  • ':not()',':has()‘和':contains()'

您还可以获取所有LI元素,然后只获取第二个元素:

代码语言:javascript
复制
qp($html, 'li')->eq(2);

或者,正如前面的帖子所指出的那样,您可以使用get()获取第二个对象的实际DOMNode对象

代码语言:javascript
复制
qp($html, 'li')->get(2);

如果您有非常复杂的需求,您可以使用filter()获取一个列表,并通过一个自定义函数运行它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5414269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档