mat*_*mat 0 php xpath html-parsing
我有一个看起来像这样的xpath:
$path = '//*[@id="page-content"]/table/tbody/tr[3]/td['.$i.']/div/a';
Run Code Online (Sandbox Code Playgroud)
其中,$i从1到X.我会正常使用:
for($i=1; $i<X;$i++){
$path = '//*[@id="page-content"]/table/tbody/tr[3]/td['.$i.']/div/a';
$nodelist = $xpath->query($path);
$result = $nodelist->item(0)->nodeValue;
};
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,我不知道X有多少.有没有办法在不知道X的情况下循环这个?
为什么不叠加em?像(脆弱的代码,添加你的支票):
// first xpath for the outer node-list
$tds = $xpath->query('//*[@id="page-content"]/table/tbody/tr[3]/td');
foreach ($tds as $td)
{
// fetch the included values with a relative xpath to the current node
$nodelist = $xpath->query('./div/a', $td);
...
}
Run Code Online (Sandbox Code Playgroud)
实际上你甚至不需要那个内部节点列表,因为你想在最后查询节点值.但是我在这里留下这个来展示你可以通过使用相对于具体节点的xpath直接做什么.
所以,如果你需要的第一个 <a>内部元件的任何 <div>内部第三 <tr>的任何内部表任何 id为节点"页面的内容",你可以把它写这样直接,它是一个查询:
//*[@id="page-content"]/table/tbody/tr[3]/td/div/a[1]
Run Code Online (Sandbox Code Playgroud)
谓词(即是括号)仅在它的前缀的路径的节点上,所以[1]只对a在端部因为是[3]只为tr.
代码示例:
$as = $xpath->query('//*[@id="page-content"]/table/tbody/tr[3]/td/div/a[1]');
foreach ($as as $a)
{
echo $a->nodeValue, "\n";
}
Run Code Online (Sandbox Code Playgroud)
因此,这将为您提供单个节点列表的结果,您不需要运行第二个xpath查询.
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |