IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

utilisation de STax


Sujet :

Java

  1. #1
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut utilisation de STax
    Bonjour à tous

    J'utilise l'api Stax pour gérer un fichier xml (owl pour être plus précis...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <owl:DatatypeProperty rdf:ID="has_deathdate">
    	<rdfs:domain rdf:resource="#Human"/>
    	<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#date"/>
    </owl:DatatypeProperty>
    <Human rdf:ID="Gangeśa">
    	<has_birthdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0000-00-00</has_birthdate>
    	<has_deathdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0000-00-00</has_deathdate>
    </Human>
    <Profession rdf:ID="Feltmaker">
    </Profession>
    <Human rdf:ID="William_Whewell">
    	<has_profession rdf:resource="#Philosopher"/>
    	<has_profession rdf:resource="#Priest"/>
    	<has_profession rdf:resource="#Scientist"/>
    	<has_profession rdf:resource="#Theologian"/>
    	<has_birthdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1794-05-24</has_birthdate>
    	<has_deathdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1866-03-06</has_deathdate>
    </Human>
    j'ai mis un bout du fichier owl pour être plus précis

    Donc voici mon problème :
    Je fais un case dedans: XMLStreamReader.START_ELEMENT et aussi un CHARACTERS

    Ainsi il me renvoie "has_profession" ou "has_birthdate" pour les START ELEMENT et il me renvoie les dates de naissances "1794-05-24" ou "1866-03-06" pour les CHARACTERS
    Moi j'aimerais aussi qu'il me renvoie ce qui est en gras: <owl: DatatypeProperty rdf:ID="has_deathdate"> et <rdfs:domain rdf:resource="#Human"/>

    Comment faire ? merci beaucoup

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Ton code aurait été plus explicite. Cependant, vu ce que tu me dis il faut simplement que tu traites dans ton case XMLStreamReader.ATTRIBUTE qui te permet de traiter les attributs. Actuellement ton code ne traite que les éléments.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut
    Merci de la réponse mais cela ne résous rien
    Une partie de mon code donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    XMLStreamReader reader = factory.createXMLStreamReader(new FileReader(file));
     
    			  while (reader.hasNext()) {
    			        int type = reader.next();
     
    			        switch(type){
     
    			        case XMLStreamReader.START_ELEMENT:
    			        	if(!owlList.contains(reader.getLocalName())){
     
    			        		System.out.println("START ELEMENT="+reader.getLocalName());
    			        	}
    			        	break;
     
    			        case XMLStreamReader.CHARACTERS:	
    			        	if (!reader.isWhiteSpace())
    			        		System.out.println("CHARACTERS="+reader.getText());
     
    			        	break;
     
    			        case XMLStreamReader.ATTRIBUTE:
    			        	System.out.println("ATTRIBUTE="+reader.getAttributeType(0));
    			        	System.out.println("JE SUIS ICI");
     
    			        	break;
    Le truc c'est qu'il m'affiche jamais la phrase "JE SUIS ICI" j'en conclus que ce "case" n'est jamais traité donc que mon fichier n'aurait pas d'attribut??? O.o

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    En effet, ca ne marche pas !
    En fait, il faut directement récupérer les attributs sur les ELEMENTS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLStreamReader reader;
    try {
      reader = factory.createXMLStreamReader(new FileReader(file));
      while (reader.hasNext()) {
         int type = reader.next();
         switch (type) {
           case XMLStreamReader.START_ELEMENT:
             if (!owlList.contains(reader.getLocalName())) {
                System.out.println("START ELEMENT=" + reader.getLocalName());
                for (int i = 0; i < reader.getAttributeCount(); i++) {
                  String namespace = reader.getAttributePrefix(i);
                  String localName = reader.getAttributeLocalName(i);
                  String value = reader.getAttributeValue(i);
                  System.out.println(namespace + ":" + localName + " = " + value);
                }
             } 
             break;
           case XMLStreamReader.CHARACTERS:
             if (!reader.isWhiteSpace())
               System.out.println("CHARACTERS=" + reader.getText());
             break;
         }
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (XMLStreamException e) {
      e.printStackTrace();
    }
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut
    Mais oui je suis bête c'est logique en plus lol >.<

    Merci beaucoup ça me sauve la vie et ça me fait avancer dans mon projet

    Sinon question subsidiaire pour créer une arborescence à partir de mon fichier XML tu me conseillerais quoi?

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    je te conseil d'éviter de poser des questions en message privé pour deux raisons :
    • certains ne répondent pas aux questions posés par MP car le forum est la pour ca
    • si la personne n'a pas la réponse, sur le forum d'autres l'ont peut être


    Revenons aux questions !

    Citation Envoyé par kululu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <Human rdf:ID="Konstantin_Pobedonostsev">
    	<has_profession rdf:resource="#Jurist"/>
    	<has_profession rdf:resource="#Statesman"/>
    	<has_nationality rdf:resource="#Russian"/>
    	<has_birthdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1827-05-21</has_birthdate>
    	<has_deathdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1907-03-23</has_deathdate>
    </Human>
    <owl:Class rdf:ID="philosophy_of_mind">
      <rdfs:subClassOf>
        <owl:Class rdf:ID="Idea"/>
      </rdfs:subClassOf>
    </owl:Class>
    <Human rdf:ID="Erwin_Schroedinger">
    	<has_birthdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0000-00-00</has_birthdate>
    	<has_deathdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0000-00-00</has_deathdate>
    </Human>
    <Human rdf:ID="Robert_Kilwardby">
    	<has_profession rdf:resource="#Cardinal"/>
    	<has_birthdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1215-00-00</has_birthdate>
    	<has_deathdate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1279-09-11</has_deathdate>
    </Human>
    Comment je fais pour récupérer ce qui est en gras :
    En gros je voudrais dire à mon programme
    Si philosophy_of_mind est une Class alors je le met dans vecteur1
    Mais si il possède un subclassof alors il vérifie de quel classe il est (dans mon exemple il est une sous classe de "Idea" ) et dans ce cas je le met dans le vecteur2

    Avec ta technique j'ai pu récupérer les attributs mais pas ce qui a en gras
    c'est normal la lecture du fichier se fait de façon séquentiel, donc j'imagine que tu vas stocker philosophy_of_mind avant même d'avoir vérifier s'il y a un tag subclassof. Pour cela il faut changer ton code afin de stocker philosophy_of_mind uniquement lorsque tu auras atteind le XMLStreamReader.END_ELEMENT correspondant au tag philosophy_of_mind.

    Citation Envoyé par kululu
    Enfin dernière question : que me conseilles tu pour créer l'arborescence d'un fichier xml
    Moi je stocke des vecteurs dans des vecteur : chaque sous vecteur est un noeud et ce dernier a donc pour père le vecteur dans lequel il fait partie et pour fils les éléments qu'il contient
    Cela dépend des infos que tu gardes, de la taille du fichier xml et aussi de la façon dont tu vas travailler avec ces données.

    tu peux :
    • Créer tes propres objets pour stocker les données
    • Utiliser les APIs DOM, qui te permet de manipuler directement des objets Document, Element, Attribut, ..
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut
    Oki j'ai bien compris ton idée d'attendre le END ELEMENT avant de stocker l'ID mais je ne sais pas comment faire :

    On ne peut pas faire un "tan qu'on est pas arrivé au END ELEMENT ne pas stocker" xD
    Car des END ELEMENT du même type il y en a plein dans mon document:

    Je prend l'exemple de ce que j'ai en gras
    Si je dis END ELEMENT : reader.getLocalName().equals("Class") qu'est ce que le compilateur en sait que c'est celui là dont je parle ça peut être celui de la ligne 304 (pas celui là quoi)

    Et même si j'y arrive comment je dis à mon programme que je veux traiter les éléments seulement entre les balises <owl:Class rdf:ID="philosophy_of_mind">
    et </owl:Class>

    j'ai vu que la classe propose une méthode isEndElement mais comment on s'en sert?

    Moi j'ai fait ça mais ça marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    switch (type) {
    				case XMLStreamReader.START_ELEMENT:
     
    					if (reader.getLocalName().equals("Class")) {
     
    						for (int i = 0; i < reader.getAttributeCount(); i++) {
    							String localName = reader.getAttributeLocalName(i);
    							String value = reader.getAttributeValue(i);
    							// String namespace = reader.getAttributePrefix(i);
     
    							if (localName.equals("rdf") && value.equals("ID")
    									&& !reader.isEndElement()) {
    								if (reader.getLocalName().equals("subClassOf")
    										&& !reader.isEndElement()) {
    									if (reader.getLocalName().equals("Class")) {
    										for (int j = 0; j < reader
    												.getAttributeCount(); j++) {
    											String subLocalName = reader
    													.getAttributeLocalName(i);
    											String subValue = reader
    													.getAttributeValue(i);
    											String subNamespace = reader
    													.getAttributePrefix(i);
     
    											if (subLocalName.equals("rdf")
    													&& subValue.equals("ID")) {
    												System.out
    														.println("SubNamespace="
    																+ subNamespace);
    											}
    										}
    									}
    								}
    							}
    						}
     
    					}
    					break;
    				}

  8. #8
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    je ne veux pas te donner la solution toute prête car il est parfois bon de chercher un peu .

    Ton exemple ne peut effectivement pas marché pour une raison simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    switch (type) {
    case XMLStreamReader.START_ELEMENT:
     if (reader.getLocalName().equals("Class")) { // ici tu test que tu es sur un tag "Class"
       for (int i = 0; i < reader.getAttributeCount(); i++) {
         String localName = reader.getAttributeLocalName(i);
         String value = reader.getAttributeValue(i);
         // String namespace = reader.getAttributePrefix(i);
         if (localName.equals("rdf") && value.equals("ID") && !reader.isEndElement()) {
           if (reader.getLocalName().equals("subClassOf") // ce sera toujours faux, tu viens de tester plus haut que tu es bien sur un tag "Class"
           && !reader.isEndElement()) {
              if (reader.getLocalName().equals("Class")) { 
                for (int j = 0; j < reader.getAttributeCount(); j++) {
                  String subLocalName = reader.getAttributeLocalName(i);
                  String subValue = reader.getAttributeValue(i);
                  String subNamespace = reader.getAttributePrefix(i);
                  if (subLocalName.equals("rdf") && subValue.equals("ID")) {
                     System.out.println("SubNamespace=" + subNamespace);
                  }
                }
              }
           }
          }
        }
      }
      break;
    }
    Une des façon de faire pour arriver a parser la partie xml dont il est question :
    • ne pas oublier que tu le lis de façon séquentiel. c'est le reader.next() qui te permet d'avancer
    • Utilise un objet pour stocker les infos
    • Lors du START_ELEMENT "class" tu crées un nouvel objet
    • Lors du END_ELEMENT "class" tu valides le contenu de l'objet


    Pour que tu comprennes bien le déroulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <owl:Class rdf:ID="philosophy_of_mind">
      <rdfs:subClassOf>
        <owl:Class rdf:ID="Idea"/>
      </rdfs:subClassOf>
    </owl:Class>
    lors du parsing de la partie xml ci-dessus, tu vas avoir :
    • START ELEMENT de type class pour philosophy_of_mind
    • START ELEMENT de type subClassOf
    • START ELEMENT de type class pour Idea
    • END ELEMENT de type class pour Idea
    • END ELEMENT de type subClassOf
    • END ELEMENT de type class pour philosophy_of_mind
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut
    Arghh j'y suis presque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    case XMLStreamReader.START_ELEMENT:
    
    					if (reader.getLocalName().equals("Class")) {
    
    						for (int i = 0; i < reader.getAttributeCount(); i++) {
    							String localName = reader.getAttributeLocalName(i);
    							String value = reader.getAttributeValue(i);
    							String namespace = reader.getAttributePrefix(i);
    
    							System.out
    									.println("---------------------------------------------");
    							System.out.println(namespace + ":" + localName
    									+ " = " + value);
    							subScan(reader);
    
    						}
    
    					}
    					break;
    Methode subScan:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    boolean subScanfinish = false;
    		try {
    			while (reader.hasNext() && !subScanfinish) {
    				int type = reader.next();
    
    				switch (type) {
    				case XMLStreamReader.START_ELEMENT:
    					if (reader.getLocalName().equals("subClassOf")) {
    						subScan2(reader);
    					}
    					break;
    
    				case XMLStreamReader.END_ELEMENT:
    					if (reader.getLocalName().equals("Class")) {
    						subScanfinish = true;
    						System.out
    								.println("---------------------------------------------");
    					}
    					break;
    				}
    			}
    méthode SubScan2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    boolean subScanfinish = false;
    		try {
    			while (reader.hasNext() && !subScanfinish) {
    				int type = reader.next();
     
    				switch (type) {
    				case XMLStreamReader.START_ELEMENT:
    					if (reader.getLocalName().equals("Class")) {
    						for (int i = 0; i < reader.getAttributeCount(); i++) {
    							String subLocalName = reader
    									.getAttributeLocalName(i);
    							String subValue = reader.getAttributeValue(i);
    							String subNamespace = reader.getAttributePrefix(i);
     
    							System.out.println(subNamespace + ":"
    									+ subLocalName + " = " + subValue);
    						}
    					}
    					break;
     
    				case XMLStreamReader.END_ELEMENT:
    					if (reader.getLocalName().equals("subClassOf")) {
    						subScanfinish = true;
     
    					}
    					break;
    				}
    			}

    Citation Envoyé par console Eclipse

    Exception in thread "main" java.lang.IllegalStateException: Current state is not among the states START_ELEMENT , ATTRIBUTEvalid for getAttributeCount()
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getAttributeCount(Unknown Source)
    at OwlRead.main(OwlRead.java:52)
    ---------------------------------------------
    rdf:ID = universals
    rdf:ID = medieval_logic (<--- lui c'est un des subclass de universals =D )
    ---------------------------------------------
    Mais sinon ça commençait bien >.< mais j'ai un soucis et je sais pas ou T_T

  10. #10
    Membre confirmé Avatar de kululu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Par défaut
    alleluia je crois que j'ai trouvé

    En faite mon subScan je dois pas la mettre dans la boucle "if" mais juste après

    comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    if (reader.getLocalName().equals("Class")) {
    
    						for (int i = 0; i < reader.getAttributeCount(); i++) {
    							String localName = reader.getAttributeLocalName(i);
    							String value = reader.getAttributeValue(i);
    							String namespace = reader.getAttributePrefix(i);
    
    							System.out
    									.println("---------------------------------------------");
    							System.out.println(namespace + ":" + localName
    									+ " = " + value);
    							
    
    						}
                                             subScan(reader);
    
    					}
    					break;
    Mais j'aimerais savoir pourquoi? lol (parce que j'ai pas compris j'ai fait par tâton)

    Mais j'aimerais avoir aussi un avis parce que ça m'a pas l'air optimal tout ça xD

  11. #11
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    d'après le code que tu viens de mettre le subScan se trouve bien dans le if mais pas dans le for (comme dans le post avant dernier).

    Si tu le met dans for c'est normal que cela plante car pour chaque attribut trouver il va lancer un subScan.

    Cependant il y a encore une erreur dans ton code :
    - ton subScan va s'arrêter lorsqu'il aura trouvé le END_ELEMENT class de philosophy_of_mind
    - ton subscan2 lui va s'arrêter lorsqu'il aura trouvé le END_ELEMENT subClassOf

    pour que ce code soit correcte, le subscan :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    boolean subScanfinish = false;
    try {
     while (reader.hasNext() && !subScanfinish) {
       int type = reader.next();
       switch (type) {
         case XMLStreamReader.START_ELEMENT:
           if (reader.getLocalName().equals("subClassOf")) {
            subScan2(reader);
           }
           break;
         case XMLStreamReader.END_ELEMENT:
           if (reader.getLocalName().equals("subClassOf")) {
             subScanfinish = true;
             System.out.println("---------------------------------------------");
           }
           break;
       }
     }
    } catch (Exception e) {
     e.printStackTrace();
    }
    Le subscan2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    boolean subScanfinish = false;
    try {
      while (reader.hasNext() && !subScanfinish) {
        int type = reader.next();
        switch (type) {
          case XMLStreamReader.START_ELEMENT:
            if (reader.getLocalName().equals("Class")) {
              for (int i = 0; i < reader.getAttributeCount(); i++) {
                String subLocalName = reader.getAttributeLocalName(i);
                String subValue = reader.getAttributeValue(i);
                String subNamespace = reader.getAttributePrefix(i);
                System.out.println(subNamespace + ":" + subLocalName + " = " + subValue);
              }
            }
            break;
          case XMLStreamReader.END_ELEMENT:
            System.out.println("END ELEMENT dans subscan2 =" + reader.getLocalName());
            if (reader.getLocalName().equals("Class")) {
              subScanfinish = true;
            }
            break;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [StAX] Installer et utiliser StAX
    Par sgimfh dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 05/02/2008, 17h24
  2. [StAX] Probleme a l'utilisation de stax a cause de rt.jar
    Par progamer54 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 27/11/2007, 11h32
  3. [staf/stax] comment utiliser staf / stax por creer des test
    Par Mokhtar BEN MESSAOUD dans le forum Outils
    Réponses: 1
    Dernier message: 17/03/2006, 14h39
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo