PHP,使用 xpath 获取所有 svg 内部<li>



我有这个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>

知道为什么会发生这种事吗?

这应该有效:

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

最新更新