Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用QueryPath获取任意HTML元素的内容_Php_Html Parsing_Querypath - Fatal编程技术网

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

Php 使用QueryPath获取任意HTML元素的内容,php,html-parsing,querypath,Php,Html Parsing,Querypath,我正在使用PHP QueryPath库从旧HTML文件集合中提取数据,并且在很大程度上使用了通过find()函数提供的CSS选择器来提取数据。然而,并不是所有包含我需要提取的数据的元素都有唯一的CSS标识符,所以我一直在使用一个丑陋的Regexp和QueryPath组合来提取数据 <ul class="list><li>Data1</li><li>Data2</li></ul> 获取可以使用的第n个匹配对象。获取可以使用的

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

<ul class="list><li>Data1</li><li>Data2</li></ul>

获取可以使用的第n个匹配对象。

获取可以使用的第n个匹配对象。

实际上有几种方法。最简单的方法是使用css3pseduclass
:nth-of-type()
。这将直接获得UL内部的第二个LI:

qp($html, 'ul>li:nth-of-type(2)');
:第n种类型
和其他CSS 3选择器采用所谓的“an+b”规则,在该规则中,您可以说出一个组中有多少项,然后说出您想要的组中的哪些项。例如,
tr:nth类型(4n+2)
将表行分成4个组,然后返回每个组中的第二个元素
:偶数和奇数只是
2n
2n+1
的简写

其他可能值得研究的CSS:

  • “:n”
  • “:类型的第一个”,“类型的第一个”
  • “:类型的最后一个,”:最后一个”
  • ':偶数',':奇数'
  • “:not()”、“:has()”和“:contains()
您还可以获取所有LI元素,然后仅获取第二个元素:

qp($html, 'li')->eq(2);
或者,正如前面的海报所指出的,您可以使用
get()
,为第二个对象获取实际的
DOMNode
对象:


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

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

qp($html, 'ul>li:nth-of-type(2)');
:第n种类型
和其他CSS 3选择器采用所谓的“an+b”规则,在该规则中,您可以说出一个组中有多少项,然后说出您想要的组中的哪些项。例如,
tr:nth类型(4n+2)
将表行分成4个组,然后返回每个组中的第二个元素
:偶数和奇数只是
2n
2n+1
的简写

其他可能值得研究的CSS:

  • “:n”
  • “:类型的第一个”,“类型的第一个”
  • “:类型的最后一个,”:最后一个”
  • ':偶数',':奇数'
  • “:not()”、“:has()”和“:contains()
您还可以获取所有LI元素,然后仅获取第二个元素:

qp($html, 'li')->eq(2);
或者,正如前面的海报所指出的,您可以使用
get()
,为第二个对象获取实际的
DOMNode
对象:

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