Php 在单个xpath中选择多个节点
如何从这个html元素中选择所有的Php 在单个xpath中选择多个节点,php,html,xpath,Php,Html,Xpath,如何从这个html元素中选择所有的,然后 从第一个td中选择/small/a 从第二个td中选择/small/i 从第三个td中选择/small 从第四个td中选择/small 从第六个td中选择/形成 我想使用php中从这里获得的信息作为数组或对象 提前谢谢 应用 路径 版本 显示名称 跑步 会议 命令 未指定 欢迎来到Tomcat 真的 开始 闲着≥ 会议记录 未指定 假的 停止 重新加载 未指定 假的 停止 重新加载 未指定 Tomcat管理器应用程序 真的 开始 停止 重新加载 解
,然后
应用
路径
版本
显示名称
跑步
会议
命令
未指定
欢迎来到Tomcat
真的
开始
闲着≥ 会议记录
未指定
假的
停止
重新加载
未指定
假的
停止
重新加载
未指定
Tomcat管理器应用程序
真的
开始
停止
重新加载
解除部署
闲着≥ 会议记录
如何从这个html元素中选择所有的,然后
我不知道s
是什么,但我想你指的是1-5个需求的元素?由于您使用PHP,因此我将假定XPath 1.0
XPath 1.0
您没有说,但我实际上认为您希望选择所有tr
(前两个除外),并从每个tr
中选择第x个
,从每个列中选择某个值
因此,让我们从tbody/tr[position()>2]
开始,然后:
从第一个td中选择/small/a
添加/td[1]/small/a
添加/td[2]/small/i
从第三个td中选择/small
添加/td[3]/small
从第四个td中选择/small
添加/td[4]/small
从第六个td中选择/形成
添加/td[6]/form
明白了吗?本质上,XPath非常简单。现在我们需要做的就是把它们结合起来。正如在评论中已经说过的,只需使用union运算符|
。这将使我们:
tbody/tr[position() > 2]/td[1]/small/a
| tbody/tr[position() > 2]/td[2]/small/i
| tbody/tr[position() > 2]/td[3]/small
| tbody/tr[position() > 2]/td[4]/small
| tbody/tr[position() > 2]/td[6]/form
就这样
现在,如果您要使用XSLT(假设您想对这个集合做一些事情),那么您可以通过在tr
上应用模板,然后为您的每个需求创建模板来实现这一点。不需要复杂的嵌套if语句
XPath2.0
为了完整起见,这里是XPath 2.0版本(可读性稍高):
或者,如果HTML的结构不包含错误,则可以编写得更简单(也是XPath 2.0):
不幸的是,PHP还不支持XPath2.0,尽管您可以使用第三方XPath2.0处理器并从PHP调用其接口
如何从这个html元素中选择所有的,然后
我不知道s
是什么,但我想你指的是1-5个需求的元素?由于您使用PHP,因此我将假定XPath 1.0
XPath 1.0
您没有说,但我实际上认为您希望选择所有tr
(前两个除外),并从每个tr
中选择第x个
,从每个列中选择某个值
因此,让我们从tbody/tr[position()>2]
开始,然后:
从第一个td中选择/small/a
添加/td[1]/small/a
添加/td[2]/small/i
从第三个td中选择/small
添加/td[3]/small
从第四个td中选择/small
添加/td[4]/small
从第六个td中选择/形成
添加/td[6]/form
明白了吗?本质上,XPath非常简单。现在我们需要做的就是把它们结合起来。正如在评论中已经说过的,只需使用union运算符|
。这将使我们:
tbody/tr[position() > 2]/td[1]/small/a
| tbody/tr[position() > 2]/td[2]/small/i
| tbody/tr[position() > 2]/td[3]/small
| tbody/tr[position() > 2]/td[4]/small
| tbody/tr[position() > 2]/td[6]/form
就这样
现在,如果您要使用XSLT(假设您想对这个集合做一些事情),那么您可以通过在tr
上应用模板,然后为您的每个需求创建模板来实现这一点。不需要复杂的嵌套if语句
XPath2.0
为了完整起见,这里是XPath 2.0版本(可读性稍高):
或者,如果HTML的结构不包含错误,则可以编写得更简单(也是XPath 2.0):
不幸的是,PHP还不支持XPath 2.0,尽管您可以使用第三方XPath 2.0处理器并从PHP调用其接口。
/td[1]/small/a |/td[2]/small/i
因此,如果不在td上使用起始斜杠,它将用于所有TDs并创建一个内容数组,因此“td/small”将为您提供数组中元素内部的所有元素的内容。/td[1]/small/a |/td[2]/small/i
因此,如果不使用td上的起始斜杠,它将用于所有TDs并创建一个内容数组,因此“td/small”将为您提供数组中元素内部的所有元素的内容。
for $tr in tbody/tr[position() > 2]
return
$tr/td[1]/small/a,
$tr/td[2]/small/i,
$tr/(td[3] | td[4])/small,
$tr/td[6]/form
tbody/tr[position() > 2]/td[not(position() = 5)]
/(small/(i | a) | small[not(i|a)] | form)