![](/img/trans.png)
[英]Select multiple blocks of nodes including the start and end nodes with XPath 1.0
[英]select multiple nodes in single xpath
我如何从该html元素中选择所有<tr>
,然后
我想使用从PHP中从这里获得的信息作为数组或对象
提前致谢
<tbody><tr> <td colspan="6" class="title">Applications</td> </tr> <tr> <td class="header-left"><small>Path</small></td> <td class="header-left"><small>Version</small></td> <td class="header-center"><small>Display Name</small></td> <td class="header-center"><small>Running</small></td> <td class="header-left"><small>Sessions</small></td> <td class="header-left"><small>Commands</small></td> </tr> <tr> <td class="row-left" rowspan="2" bgcolor="#FFFFFF"><small><a href="/">/</a></small></td> <td class="row-left" rowspan="2" bgcolor="#FFFFFF"><small><i>None specified</i></small></td> <td class="row-left" rowspan="2" bgcolor="#FFFFFF"><small>Welcome to Tomcat</small></td> <td class="row-center" rowspan="2" bgcolor="#FFFFFF"><small>true</small></td> <td class="row-center" rowspan="2" bgcolor="#FFFFFF"><small><a href="/manager/html/sessions?path=/&org.apache.catalina.filters.CSRF_NONCE=7DF475B8EF3807C4BCA8651FEBA676EA">0</a></small></td> <td class="row-left" bgcolor="#FFFFFF"> <small>Start</small> <form class="inline" method="POST" action="/manager/html/stop?path=/&org.apache.catalina.filters.CSRF_NONCE=7DF475B8EF3807C4BCA8651FEBA676EA"> <small><input value="Stop" type="submit"></small> </form> <form class="inline" method="POST" action="/manager/html/reload?path=/&org.apache.catalina.filters.CSRF_NONCE=7DF475B8EF3807C4BCA8651FEBA676EA"> <small><input value="Reload" type="submit"></small> </form> <form class="inline" method="POST" action="/manager/html/undeploy?path=/&org.apache.catalina.filters.CSRF_NONCE=7DF475B8EF3807C4BCA8651FEBA676EA"> <small><input value="Undeploy" type="submit"></small> </form> </td> </tr><tr> <td class="row-left" bgcolor="#FFFFFF"> <form method="POST" action="/manager/html/expire?path=/&org.apache.catalina.filters.CSRF_NONCE=7DF475B8EF3807C4BCA8651FEBA676EA"> <small> <input value="Expire sessions" type="submit"> with idle ≥ <input name="idle" size="5" value="30" type="text"> minutes </small> </form> </td> </tr> <tr> <td class="row-left" rowspan="2" bgcolor="#C3F3C3"><small><a href="/item1/">/item1</a></small></td> <td class="row-left" rowspan="2" bgcolor="#C3F3C3"><small><i>None specified</i></small></td> <td class="row-left" rowspan="2" bgcolor="#C3F3C3"><small> </small></td> <td class="row-center" rowspan="2" bgcolor="#C3F3C3"><small>false</small></td> <td class="row-center" rowspan="2" bgcolor="#C3F3C3"><small><a href="/manager/html/sessions">0</a></small></td> <td class="row-left" rowspan="2" bgcolor="#C3F3C3"> <form class="inline" method="POST" action="item1Start"> <small> <input value="Start" type="submit"> </small> </form> <small>Stop</small> <small>Reload</small> <form class="inline" method="POST" action="item1Undeploy"> <small> <input value="Undeploy" type="submit"> </small> </form> </td> </tr> <tr></tr> <tr> <td class="row-left" rowspan="2" bgcolor="#FFFFFF"><small><a href="/item2/">/item2</a></small></td> <td class="row-left" rowspan="2" bgcolor="#FFFFFF"><small><i>None specified</i></small></td> <td class="row-left" rowspan="2" bgcolor="#FFFFFF"><small> </small></td> <td class="row-center" rowspan="2" bgcolor="#FFFFFF"><small>false</small></td> <td class="row-center" rowspan="2" bgcolor="#FFFFFF"><small><a href="/manager/html/sessions">0</a></small></td> <td class="row-left" rowspan="2" bgcolor="#FFFFFF"> <form class="inline" method="POST" action="/manager/html/sessions?path=/manager"> <small><input value="Start" type="submit"></small> </form> <small>Stop</small> <small>Reload</small> <form class="inline" method="POST" action="/manager/html/sessions?path=/manager"> <small> <input value="Undeploy" type="submit"> </small> </form> </td> </tr> <tr></tr> <tr> <td class="row-left" rowspan="2" bgcolor="#C3F3C3"><small><a href="/manager/">/manager</a></small></td> <td class="row-left" rowspan="2" bgcolor="#C3F3C3"><small><i>None specified</i></small></td> <td class="row-left" rowspan="2" bgcolor="#C3F3C3"><small>Tomcat Manager Application</small></td> <td class="row-center" rowspan="2" bgcolor="#C3F3C3"><small>true</small></td> <td class="row-center" rowspan="2" bgcolor="#C3F3C3"><small><a href="/manager/html/sessions?path=/manager&org.apache.catalina.filters.CSRF_NONCE=7DF475B8EF3807C4BCA8651FEBA676EA">33</a></small></td> <td class="row-left" bgcolor="#C3F3C3"> <small> Start Stop Reload Undeploy </small> </td> </tr><tr> <td class="row-left" bgcolor="#C3F3C3"> <form method="POST" action="/manager/html/expire?path=/manager&org.apache.catalina.filters.CSRF_NONCE=7DF475B8EF3807C4BCA8651FEBA676EA"> <small> <input value="Expire sessions" type="submit"> with idle ≥ <input name="idle" size="5" value="30" type="text"> minutes </small> </form> </td> </tr> </tbody>
我如何从这个html元素中选择所有s,然后
我不知道s
是什么,但我假设您是指1-5要求中的元素? 由于您使用PHP,因此我假设使用XPath 1.0。
您没有说出来,但我实际上认为您想选择所有tr
(前两个除外),并从每个tr
选择x th <td>
并从每个列中选择特定值。
因此,让我们从tbody/tr[position() > 2]
,然后:
从第一个td中选择/ small / a
添加/td[1]/small/a
select /small/i from the second td
添加/td[2]/small/i
从第三个TD中选择/小
添加/td[3]/small
从第四个TD中选择/小
添加/td[4]/small
从第六个td选择/ form
添加/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语句。
为了完整起见,这是XPath 2.0版本(可读性更高):
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
或者,如果HTML的结构不包含错误,则可以编写更简单的代码(也包括XPath 2.0):
tbody/tr[position() > 2]/td[not(position() = 5)]
/(small/(i | a) | small[not(i|a)] | form)
不幸的是,PHP尚不支持XPath 2.0,尽管您可以使用第三方XPath 2.0处理器并从PHP调用其接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.