首页 > 解决方案 > PHP,使用 xpath 获取里面的所有 svg

  • 问题描述

    我有这个html:

    <ul class="details">
    
    <li>
      <svg class="icon"><use xlink:href="#icon-location"></use></svg>
      
        <span>São João de Vêr, Aveiro</span>
      
    </li>
    
    
    
    <li>
      <svg class="icon"><use xlink:href="#icon-contract"></use></svg>
      Permanente
    </li>
    
    
    <li>
      <svg class="icon"><use xlink:href="#icon-duration"></use></svg>
      Horário completo
    </li>
    

    从这里开始,我需要使用单独的数据(svg 和文本之后)来获取每个 li 的内容。

    我试试这个,但我只得到没有 sgv 元素的 li 内容:

    $dom = new \DOMDocument();
        $dom->preserveWhiteSpace = false;
        $dom->loadHTML($html);
        $xpath = new \DOMXPath($dom);
    
        $div = $xpath->query('//ul[@class="details"]');
        $div = $div->item(0);
        $result = $dom->saveXML($div);
        dd($result);
    

    结果:

    <ul class="details">    
    <li>     
        <span>São João de Vêr, Aveiro</span>      
    </li>
    <li>
      Permanente
    </li>
    <li>      
      Horário completo
    </li>    
    

    预期结果:

    <ul class="details">  
    <li>
      <svg class="icon"><use xlink:href="#icon-location"></use></svg>    
        <span>São João de Vêr, Aveiro</span>      
    </li>
    <li>
      <svg class="icon"><use xlink:href="#icon-contract"></use></svg>
      Permanente
    </li>
    <li>
      <svg class="icon"><use xlink:href="#icon-duration"></use></svg>
      Horário completo
    </li>
    

    知道为什么会这样吗?

    标签: phpxpath

    解决方案


    这应该有效:

    $div = $xpath->query('//ul[@class="details"]/*');
    foreach($div as $d){
      $result = $dom->saveXML($d);
      echo($result);
      }
    

    推荐阅读