J'essaie d'obtenir un enfant d'un Domdocument PHP. Dis que j'ai un document DOM comme ceci: J'ai un numéro d'index 3. Puis j'ai besoin d'obtenir l'élément enfants (3) code>. Y a-t-il? Comment puis-je obtenir un enfant avec un index? P> p>
4 Réponses :
Si vous utilisez DOMDocument, vous pouvez utiliser getelementsbytagname ('*') code> qui retourne un domnodeliste avec tous les éléments de votre document. Vous pouvez ensuite appeler la fonction item code> qui prend un index sous forme de paramètre:
Bonjour, merci pour la réponse, votre solution obtient tout l'élément de tous les nœuds descendantes. et toutes les balises HTML sont rayées. Mon intention est d'obtenir un niveau d'enfant par niveau avec une série d'index comme 1 3 4 0. J'espère que cela est clair.
Essayez ceci
foreach($dom->getElementsByTagName('div') as $div) {
$class = $div->getAttribute('class');
}
vous peut em> utiliser Vous pouvez aller avec La solution d'Alexn ( Ma solution préférée serait d'utiliser XPath: c'est probablement la solution la plus stable, et pas particulièrement difficile. P> Vous aurez besoin d'avoir créé un Objet XPath avec note que Encore une fois, nous utilisons un index à base de 0 pour trouver quel élément de la sélection est. Ici, nous examinons les noeuds d'enfants du haut niveau enfantNODES code>. Il s'agit d'une propriété d'un élément DOM contenant une nodéliste contenant tous les enfants de l'élément. Idéalement, vous seriez capable de faire € el-> enfantNodes-> item (2) code> (notez qu'il est basé sur 0, pas à 1 fois, 2 est le troisième élément). Cependant, cela inclut les nœuds de texte. Il est donc difficile de prédire quel numéro votre noeud sera. Ce n'est probablement pas la meilleure solution. getelementsbytagname ('*') -> élément (2) code>), mais à nouveau, cela a ses inconvénients. Si vos nœuds ont des nœuds d'enfants, ils seront également inclus dans la sélection. Cela pourrait lancer votre calcul. P> $ xpath = nouveau DOMXPATH ($ document) code> quelque part, où $ document code> est votre instance DOMDocument. Je vais supposer que £ el code> est le noeud parent div, le "contexte" que nous recherchons dans. P> div code> uniquement et * code> sélectionne uniquement les nœuds d'élément, de sorte que les calculs avec des nœuds de texte sont inutiles. P> p>
Bonjour, merci de votre réponse. J'ai essayé $ el-> enfant-> article (2). Il a rayé toutes les balises HTML. J'ai aussi essayé $ x-> Query ('/ div / *', $ el) -> élément (2); mais remarquez que le nœud enfant n'est pas corrigé avec div ... j'ai besoin de dynamiser pour obtenir un niveau d'enfant par Niveau bas avec un indice de série comme 1 3 4 0.
@Yijie Oui, il aurait dû être juste Query ('*', $ el) code>. Voir la réponse mise à jour.
Essayez ceci:
$dom->childNodes->item(3)
Vous devez utiliser GetElementyTag ('div'), puis utilisez la getattribute ('Class') et mettez-la dans si la condition correspond à la classe = 'Test'. Cela nécessite un peu de RND
(liée) i> meilleures méthodes pour analyser HTML A > et NOOB Question sur Domdocument à PHP
Dupliqué possible de Comment obtenir le premier niveau d'éléments DOM par DOMDocument Php?
@ Gordon.Je suis en train d'utiliser HTML DOM Parser. Mais cela ne semble pas robuste lorsque le document est grand. Je vais regarder ces post que vous vous référez à vous-même.