如何使用 xpath 查询获取最后一个 <a> 标记值


How to fetch last <a> tag value using xpath query

这是我的代码:

<div class="float-right">
    <span class="lowercase"><a name="pagination" class=" cm-history">«&nbsp;Previous</a></span>
    <span class="strong">1</span>   
<a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=2" rel="2" rev="pagination_contents">2</a>                                                         
<a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=3" rel="3" rev="pagination_contents">3</a>                                                         
<a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=4" rel="4" rev="pagination_contents">4</a>                                                         
<a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=5" rel="5" rev="pagination_contents">5</a>                                                         
<a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=6" rel="6" rev="pagination_contents">6</a>                                                         
<a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=7" rel="7" rev="pagination_contents">7</a>                                                         
<a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=8" rel="8" rev="pagination_contents">8</a>                             
<a name="pagination" class="cm-ajax force next-range cm-history" href="vendor.php?dispatch=products.manage&amp;page=9" rel="9" rev="pagination_contents">&nbsp;...&nbsp;</a>
<a name="pagination" class=" cm-history" href="vendor.php?dispatch=products.manage&amp;page=13" rel="13" rev="pagination_contents">13</a>
<span class="lowercase"><a name="pagination" class="cm-ajax force cm-history" href="vendor.php?dispatch=products.manage&amp;page=2" rel="2" rev="pagination_contents">Next&nbsp;»</a></span>
<span class="pagination-total-items">&nbsp;Total items:&nbsp;</span><span>190&nbsp;/</span>

</div>

我想获取最后<a>标签值。

因此,输出将是:13

我尝试了以下代码:

$pagination = $xPath->query("//div[@class='float-right'] //a /text()[last()]");
echo $pagination = $pagination->item(0)->nodeValue;

但它返回空结果。我做错了什么?

$xPath->query("(//a[@name='pagination'])[last()]")

我有一个作弊给你(注意:未经测试的伪代码):

foreach ($xPath->query("//a[@name='pagination']") as $elem) {} // do nothing
echo $elem->firstChild->nodeValue;

至于返回空字符串item(0)->nodeValue,我认为换行符和其他空格也被视为文本节点。

产量item(0)->saveXML()产量是多少?

我想获取最后<a>标签值。

包含"13"的a元素节点实际上并不是您显示的代码段中的最后一个链接元素。测试这个(HTML在"test.html"中,请参阅此页面):

<?php
$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
@$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
$elements = $xpath->evaluate("//a[@name = 'pagination'][last()]");
if (!is_null($elements)) {
  foreach ($elements as $element) {
    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "'n";
    }
  }
}

然后,结果是

Next »

存在编码问题,但对您的问题无关紧要。更重要的是,正如你所看到的,你所追求的实际上是倒数第二个a元素。考虑一种唯一标识此链接元素的方法,例如

$elements = $xpath->evaluate("//a[@rel = '13']");

这将导致

13