DOMDocument « s loadHTML() méthode fonctionne bien avec des fragments HTML non valides, afin que vous puissiez utilisez DOMXPath de cette façon:
<?php
$html = 'text1
<br>
text2
<br/>
text3
<br/>
text4
<br>
text5';
echo "<pre>" . htmlentities($html) . "</pre><br>\n";
$dom = new DOMDocument();
// loadHtml() needs mb_convert_encoding() to work well with UTF-8 encoding
$dom->loadHtml(mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8"));
$xpath = new DOMXPath($dom);
echo "Text nodes preceding br:";
foreach($xpath->query('//text()[(following::br)]') as $node)
{
var_dump($node->wholeText);
}
echo "Text nodes following br:";
foreach($xpath->query('//text()[(preceding::br)]') as $node)
{
var_dump($node->wholeText);
}
echo "Text nodes following OR preceding br:";
foreach($xpath->query('//text()[(following::br) or (preceding::br)]') as $node)
{
var_dump($node->wholeText);
}
Cela ne ressemble pas à du code XML valide pour que XPATH fonctionne. – geoffc
Ce n'est * pas * une question XPAth du tout - votre texte n'est pas bien formé XML! Apprenez que XPath peut être utilisé uniquement sur un document XML bien formé ou un fragment XML. –
J'ai trouvé votre édition très choquante et je l'ai signalée. J'ai roll soutenu. Je pense qu'il devrait être évident pour vous que ce Xpath n'est pas bien formé, mais traitant de HTML à partir du Web, c'est juste un fait et le besoin de traiter ces cas irréguliers. – KJW