2010-07-22 3 views
8

Bonjour à tous Je suis en train d'analyser un arbre DOM en utilisant Neko/Xerces en Java.Impossible d'appeler getElementsByTagName sur un noeud dans Xerces ou Neko?

NodeList divs = this.doc.getElementsByTagName("DIV"); 
for(int i=0; i < divs.getLength(); i++) { 
    NodeList images = divs.item(i).parentNode().getElementsByTagName("IMG"); 
    // operate on these 
} 

est ce que j'aimerais idéalement faire. Il semble que je peux seulement appeler getElementsByTagName sur le document lui-même? Est-ce que je fais quelque chose de mal? Dois-je pouvoir appeler cela sur un élément Node?

Je peux voir à partir des docs que ce n'est pas là: http://xerces.apache.org/xerces-j/apiDocs/org/w3c/dom/Node.html alors peut-être que je dois le faire d'une autre manière?

merci!

Répondre

0

Oui, c'est bizarre. Le fichier xml.dom.minidom de Python a un Node.getElementsByTagName. Peut-être que cela ne fait pas partie de la norme. Au lieu de cela, vous pouvez itérer une boucle interne sur divs.item(i).parentNode().getChildNodes().

6

Un NodeList ne renvoie que des nœuds et getElementsByTagName n'est disponible que sur un Element node Vous devez donc convertir votre nœud en élément, voici un exemple ci-dessous.

final NodeList images = ((Element)divs.item(i).getParentNode()).getElementsByTagName("IMG"); 

être cependant prudent avec ce qu'il suppose que GetParentNode() retourne toujours un élément

Ce serait plus sûr, mais beaucoup plus bavard

final Node n = divs.item(i).getParentNode(); 

if(n instanceof Element) { 
    final Element e = (Element)n; 
    e.getElementsByTagName("IMG"); 
} 
Questions connexes