DOMDocument en php
Je viens de commencer la lecture de la documentation et des exemples sur les DOM, afin d'explorer et d'analyser le document.
Par exemple, j'ai une partie de document indiqué ci-dessous:
<div id="showContent">
<table>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td width="172" valign="top"><a href="link"><img height="91" border="0" width="172" class="" src="img"></a></td>
<td width="10"> </td>
<td valign="top"><table cellspacing="0" cellpadding="0" border="0">
<tbody><tr>
<td height="30"><a class="px11" href="link">title</a><a><br>
<span class="px10"></span>
</a></td>
</tr>
<tr>
<td><img height="1" width="580" src="crap"></td>
</tr>
<tr>
<td align="right">
<a href="link"><img height="16" border="0" width="65" src="/buy"></a>
</td>
</tr>
<tr>
<td valign="top" class="px10">
<p style="width: 500px;">description.</p>
</td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
</table>
</div>
Je suis en train d'utiliser le code suivant pour obtenir tous les tr
balises et d'analyser si il y est de la merde ou de l'information à l'intérieur d'eux:
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('.//div[@id="showContent"]');
foreach ($tags as $tag) {
$string="";
$string=trim($tag->nodeValue);
if(strlen($string)>3) {
echo $string;
echo '<br>';
}
}
Cependant, je suis seulement dépouillé de chaîne sans les balises, par exemple:
Crap
Crap
Title
Description
Mais je voudrais obtenir:
<tr>
<td>Crap</td>
</tr>
<tr>
<a href="link">title</a>
</tr>
Comment garder html nœuds (tags)?
- Voir innerHTML en PHP DOMDocument.
- Votre recherche XPath de la div. Pour obtenir le code HTML que vous montrez, vous auriez à utiliser différents Requête XPath/Requêtes, puis de transmettre les résultats à
echo $dom->save($node)
. Veuillez préciser ce que vous essayez d'obtenir. - innerHTML n'est pas nécessaire ici.
- merci, pour le lien
- Je suis en train d'essayer d'obtenir de l'information d'une page et l'afficher dans un autre, mais la page est la liste de plusieurs informations à l'intérieur d'un tableau, certaines sont pertinentes, d'autres ne le sont pas, j'ai des images, des titres et des descriptions qui je veux, et puis des styles, des chiffres que je n'aime pas, mais je veux obtenir le code html à l'intérieur de la div à l'analyse de la pertinence des données, avec mon code je reçois toutes les chaînes et je ne sais pas si c'était une div à l'intérieur d'un td, raw td ou quelque chose d'autre (toutes les infos sont à l'intérieur de cette grosse div)
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez travailler avec DOM vous devez comprendre le concept. Le tout dans un Document DOM, y compris le DOMDocument, est un Nœud.
Le DOMDocument est une arborescence de nœuds. Il commence avec un nœud racine. Que le nœud racine peut avoir des nœuds enfants et de tous les nœuds enfants peuvent avoir des nœuds enfants sur leur propre. Fondamentalement, le tout dans une
DOMDocument
est un type de nœud d'une certaine sorte, que ce soit des éléments, des attributs de texte ou de contenu.Le diagramme ci-dessus montre une DOMDocument avec certains nœuds. Il est un élément racine (HTML) avec deux enfants (TÊTE et CORPS). Les lignes de connexion sont appelés axes. Si vous suivez vers le bas de l'axe de l'élément de TITRE, vous verrez qu'il a une DOMText de la feuille. Ceci est important car il illustre un aspect souvent négligé chose:
n'est pas un, mais deux nœuds. Un DOMElement avec un DOMText enfant. De même, cette
est vraiment trois nœuds: le DOMElement avec un DOMAttr la tenue d'une DOMText. Car tous ceux-ci héritent de leurs propriétés et de méthodes de DOMNode, il est essentiel de se familiariser avec les DOMNode classe.
Dans la pratique, cela signifie que la DIV vous avez récupéré est lié à tous les autres nœuds dans le document. Vous pouvez aller tout le chemin à la racine de l'élément ou à la baisse, quitte à tout moment. Tout y est. Vous avez juste à la requête ou à parcourir le document pour l'information voulue.
Si vous ne faites que par itération les
childNodes
de laDIV
ou de l'utilisationgetElementByTagName()
ou XPath est à vous. Vous avez juste à comprendre que vous ne travaillez pas avec du HTML brut, mais avec des nœuds représentant l'ensemble de ce document HTML.Si vous avez besoin d'aide à l'extraction des informations spécifiques à partir d'un document, vous devez préciser quelles sont les informations que vous souhaitez récupérer à partir d'elle. Par exemple, vous pourriez demander comment faire pour récupérer tous les liens de la table et ensuite nous avons pu répondre quelque chose comme:
Mais à moins que vous sont plus spécifiques, nous ne pouvons que deviner lequel les nœuds peuvent être pertinents.
Si vous avez besoin de plus d'exemples et extraits de code sur la façon de travailler avec DOM parcourir mes précédentes réponses aux questions connexes:
Maintenant, il devrait y avoir un extrait de code pour chaque base de support de cas d'utilisation que vous pourriez avoir avec DOM.
Pour créer un analyseur vous pouvez utiliser htmlDOM.
Il est très simple et facile à utiliser DOM parser écrit en php. En l'utilisant, vous pouvez récupérer facilement le contenu de
div
tag.Par exemple, rechercher tous
div
balises qui ont l'attributid
avec une valeur detext
.