2010-08-09 11 views
1

En PHP J'utilise DOMDocument et je dois rechercher un élément qui a attribut class = « quelque chose »DOMDocument besoin de rechercher un élément qui a l'attribut class = « quelque chose »

Je suis nouveau avec DOMDocument (j'ai utilisé REGEX toute ma vie alors aidez-moi: P)

Ok, ma question est, j'ai trouvé un DOMElement en utilisant getElementById, maintenant je veux regarder à l'intérieur des enfants de cet élément et récupérer un nœud qui a une classe particulière, class = "quelque chose"

Comment faire cela?

Répondre

3

Une fois que vous avez un DOMNode$n pour un document $d dont les enfants que vous souhaitez filtrer par classe que vous pouvez faire (cette recherche récursive):

$xp = new DOMXpath($d); 
foreach ($xp->query('//*[contains(@class, \'classname\')]', $n) as $found) { 
    //do sth with $found 
} 

Le point de contains est d'attraper ces nœuds dont l'attribut de classe a plus d'une valeur, mais c'est un peu trop grossier. Voir here pour une meilleure solution.

+0

Pouvez-vous expliquer '$ n'? est-ce que c'est tagname? Comme 'div'' section' etc? – Sisir

+0

@Sisir C'est un objet de type 'DOMNode' (en particulier un' DOMElement'). Dans le cas de l'OP, il l'obtient avec 'DOMDocument :: getElementById()'. Cela représentera un élément dans le DOM. – Artefacto

3

Utilisez une requête XPath:

$xpath = new DOMXPath($document); 
// keep the quotes around the classname 
$elementsThatHaveMyClass = $xpath->query('//*[@class="class here"]'); 

L'expression signifie "partout dans le document, trouver une étiquette dont class attribut est égal à class here". Vous pouvez en savoir plus sur la syntaxe XPath here.