2009-10-16 6 views
2

J'ai un objet XML org.w3c.dom.Document.Comment obtenir un sous-ensemble d'un document XML Java org.w3c.dom.Document?

Il semble sorta comme ceci:

<A> 
    <B> 
    <C/> 
    <D/> 
    <E/> 
    <F/> 
    </B> 
    <G> 
    <H/> 
    <H/> 
    <J/> 
    </G> 
</A> 

Comment puis-je convertir l'objet document afin qu'il se déshabille le nœud racine et renvoie un autre objet de document sous-ensemble (sélectionné par nom) qui ressemble à ceci:

<G> 
    <H/> 
    <H/> 
    <J/> 
</G> 

J'espère que quelque chose comme ceci:

... 
Document doc = db.parse(file); 
Document subdoc = doc.getDocumentSubsetByName("G"); //imaginary method name 
NodeList nodeList = subdoc.getElementsByTagName("H"); 

Mais j'ai difficulté à trouver une telle chose.


La réponse se révèle être quelque chose comme ceci:

... 
Document doc = db.parse(); 
doc.getDocumentElement.normalize(); 
NodeList a = doc.getElementsByTagName("A"); 
Element AsubNode = null; 
if (a.item(0) != null) { 
    AsubNode = (Element) a.item(0); 
    nodeList = AsubNode.getElementsByTagName("G"); 
... 
+0

J'ai l'impression que la solution a quelque chose à voir avec la conversion du noeud G en un objet Element et l'obtention d'une liste de nœuds à partir de cela. – djangofan

Répondre

0

Vous pouvez simplement utiliser getElementsByTagName("G") pour obtenir les éléments G, puis choisissez l'un d'entre eux et appeler getElementsByTagName("H") sur ce point.

+0

cette première méthode m'obtient un objet NodeList mais je veux "finir" avec un NodeList. par conséquent, j'ai besoin de sous-ensemble le document "avant" je convertis en NodeList. c'est le dilemme. – djangofan

+0

Je ne comprends pas très bien la difficulté avec ça. A partir d'une liste de nœuds, vous pouvez obtenir un nœud spécifique, que vous pouvez ensuite convertir en élément (si nécessaire, selon votre langue), puis appeler getElementsByTagName sur l'élément. –

+0

Oh, je vois que vous utilisez Java. Alors oui, vous devrez lancer. –

0

Bien sûr, vous pouvez toujours utiliser XPath pour faire la même chose:

import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathFactory; 
import org.w3c.dom.NodeList; 

final XPath xpath = XPathFactory.newInstance().newXPath(); 
final NodeList list = (NodeList) xpath.evaluate("/A/G/H", 
    doc.getDocumentElement(), XPathConstants.NODESET); 

Cela commence à payer lorsque le chemin de vos éléments commence à devenir plus complexe (nécessitant prédicats d'attributs, etc ..)

+0

merci beaucoup! – djangofan

Questions connexes