如何使用XPath选择第一个具有相同属性的ul及其子元素

3

我有一个主页,其中有两个分页部分。我想一次选择所有页面。我该怎么做?

<div class='row row-large s-t-sm'>

   <div class='columns'>
      <div class='pagination-centered'>
         <ul class='pagination'>
            <li><a href='1.php'>1</a></li>
            <li><a href='2.php'>2</a></li>
            <li><a href='3.php'>3</a></li>
         </ul>
      </div>
   </di>

</div>

页面底部有同样的内容。当我想要提取每个

  • 内部每个的href时,它返回null。

    <?php
    $sitecontent =  file_get_contents('www.example.com');
    $dom = new DOMDocument();
    libxml_use_internal_errors(true);
    $dom->loadHTML($sitecontent);
    libxml_use_internal_errors(false);
    $xpath = new DOMXPath($dom);
    $nodes = $xpath->query("//(div[@class='row row-large m-t-sm']/div[@class='column']/div/ul[@class='pagination'])[1]/li/a/@href");
    foreach ($nodes as $link) {
          $stackHref[]=$link->nodeValue;      
      }
    var_dump($stackHref);//returns array with Zero
    ?>
    

  • 去掉"[1]"?有了 "[1]",你只选择第一个ul。 - Andrejs
    @AndreyDoronin 我想要获取第一个 ul 及其子元素。我的意思是只想选择所有的 href 一次。 - john john
    1个回答

    0

    尝试以下 xpath :-

    (//ul[@class="pagination"])[1]//@href
    

    在你的代码中使用上述xpath,如下所示:

    $nodes = $xpath->query('(//ul[@class="pagination"])[1]//@href');
    

    @johnjohn,你在括号外提供了//,应该是(//.. :) - Saurabh Gaur

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接