2010-11-10 3 views
2

J'utilise java stax XMLStreamReader pour lire un fichier XML. Je veux saisir toute la chaîne de certains nœuds internes.java stax obtenir la chaîne du noeud interne

XML:

<example> 
    <ignoreMe> 
     <bla></bla> 
    </ignoreMe> 
    <getMe> 
     <data></data> 
    </getMe> 
</example> 

Je veux juste être en mesure d'obtenir l'ensemble noeud GetMe interne dans une chaîne. IE:

<getMe> 
     <data></data> 
    </getMe> 

Voici ce que j'ai .. mais je suis coincé:

XMLStreamReader parser = factory.createXMLStreamReader(new FileReader(file)); 
for (int event = parser.next(); 
event != XMLStreamConstants.END_DOCUMENT; 
event = parser.next()) { 

    switch (event) { 
    case XMLStreamConstants.START_ELEMENT: 
     if (parser.getLocalName().equals("GetMe")) { 
      //?????????????????? 

Répondre

2

j'ai commencé à apprendre Stax la semaine dernière, mais si vous êtes toujours à la recherche d'une réponse à votre problème, cela peut vous aider:

XMLInputFactory xmlif = XMLInputFactory.newInstance(); 
    xmlif.setProperty(XMLInputFactory.IS_COALESCING, true); 
    XMLStreamReader xmlsr; 
    String resultat=""; 
    boolean isGetme=false; 

    try { 
     xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml")); 
     int eventType; 
     while (xmlsr.hasNext()) { 
      eventType = xmlsr.next(); 
      switch (eventType) { 
       case XMLStreamConstants.START_ELEMENT: 
        if(xmlsr.getLocalName().equals("getMe")){ 
         isGetme=true; 
        } 
        if(isGetme){ 
         resultat+="<"+xmlsr.getLocalName()+">"; 
        } 
        break; 
       case XMLStreamConstants.CHARACTERS: 
        if(isGetme){ 
         resultat+=xmlsr.getText(); 
        } 
        break; 
       case XMLStreamConstants.END_ELEMENT: 
        if(xmlsr.getLocalName().equals("getMe")){ 
         resultat+="</"+xmlsr.getLocalName()+">"; 
         isGetme=false; 
        } 
        if(isGetme && !xmlsr.getLocalName().equals("getMe")){ 
         resultat+="</"+xmlsr.getLocalName()+">"; 
        } 
        break; 
       default: 
        break; 
      } 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (XMLStreamException e) { 
     e.printStackTrace(); 
    } 
    System.out.println(resultat); 

Ce code vous obtiendrez tous les nœuds internes et le contenu du texte, et Stockez-le dans une chaîne. i.e.:

<getMe> 
     <data>test</data> 
</getMe> 

Cependant, ce code est tout à fait « laid » et est sûrement pas la meilleure solution pour ce que vous cherchez, JDOM peut être plus adapté à vos besoins.

+0

Merci .. J'ai fini par utiliser JDOM. – Nick

2

Vérifier this

Vérifiez la méthode parser.getElementText()

HTH

Cela vous obtiendrait le texte intérieur, vous pouvez ajouter le nom de départ et de fin m anuellement par une méthode normale. Et puisque XML est une norme stricte, tout va bien.

+1

pas vraiment ce que je cherche, mon exemple xml est simple, mais en réalité, il est complexe et contient des annotations pour démarrer. De plus, le parser.getElementText() a généré une exception pour moi. – Nick

Questions connexes