Xpath,在HTML代码内找到节点的位置

时间:2019-09-18 08:23:18

标签: php dom xpath

我正在尝试弄清如何或是否有可能找出表中具有特定内容的html元素在什么位置。

所以这是我的html表,我尝试获取“ Sally”的位置,在这种情况下,它显然是位置3。我尝试了很多xpath查询,但是没有任何位置输出像“ 3”这样的数字。 “ Sally”的位置当然可以更改。

<table class"table" id="t1">
<tbody id="tb1">
<tr>
    <td>
        <div class="sh-osd">
            <a class="osd-link" href="#"><span>Peter</span></a>
        </div>
    </td>
    <td>...</td>
    <td>...</td>
    <td>...</td>
</tr>
    <tr>
    <td>
        <div class="sh-osd">
            <a class="osd-link" href="#"><span>Jeff</span></a>
        </div>
    </td>
    <td>...</td>
    <td>...</td>
    <td>...</td>
</tr>
<tr>
    <td>
        <div class="sh-osd">
            <a class="osd-link" href="#"><span>Sally</span></a>
        </div>
    </td>
    <td>...</td>
    <td>...</td>
    <td>...</td>
</tr>
<tr>
    <td>
        <div class="sh-osd">
            <a class="osd-link" href="#"><span>John</span></a>
        </div>
    </td>
    <td>...</td>
    <td>...</td>
    <td>...</td>
</tr>
</tbody>
</table>

那么也许有一个xpath函数/查询可以做到这一点?

2 个答案:

答案 0 :(得分:1)

如果使用xpath 1.0

count(//table/tbody/tr[td/div/a/span/text()='Sally']/preceding-sibling::*) + 1

如果使用xpath 2.0,请尝试

index-of(//table[@id='t1']/tbody[@id='tb1']/tr/td/div/a/span, //table[@id='t1']/tbody[@id='tb1']/tr/td/div/a/span[text()='Sally'])

答案 1 :(得分:0)

我不确定是否有可用的方法。但也许您可以通过以下方式解决它:

<?php

$file = "xpath.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//a[@class='osd-link']");

$i = 0;

foreach ($elements as $element) {
    $nodes = $element->childNodes;

    foreach ($nodes as $node) {
        echo $i. " ".$node->nodeValue. "\n";
        $i++;
    }
}

?>