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

XML/XSL et SOAP Discussion :

DOM et XML : Problème récupérer un Attribut


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 20
    Par défaut DOM et XML : Problème récupérer un Attribut
    Bonjour, je suis en train de sécher. Je voudrais récupérer dans mon fichier XML ci-joint, les parties "nw:weightMatrix" et "nw:thresholdVector" dans une boucle for, le problème c'est que j'utilisais le compteur pour afficher et celà marche. Mais il faut que je récupère les données en utilisant les attributs. C'est la que vient le problème, je n'y arrive pas. Pouvez-vous m'aidez ?

    Voici mon code XML :
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <nw:network
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xmlns:nw='https://www.timc.imag.fr/TBAN'
        xsi:schemaLocation='https://www.timc.imag.fr/TBAN file:/home/dervieco/Documents/StageL3/NetBeans/TestStructXML/src/xml/Network.xsd'>
        <nw:structure>
            <nw:nbState>2</nw:nbState>
            <nw:nodeNumber>3</nw:nodeNumber>
            <nw:weightMatrix>
                <nw:row rowNo="0">
                    <nw:cell cellNo="0">-1</nw:cell>
                    <nw:cell cellNo="1">2</nw:cell>
                    <nw:cell cellNo="2">-1</nw:cell>
                </nw:row>
                <nw:row rowNo="1">
                    <nw:cell cellNo="0">-1</nw:cell>
                    <nw:cell cellNo="1">1</nw:cell>
                    <nw:cell cellNo="2">1</nw:cell>
                </nw:row>
                <nw:row rowNo="2">
                    <nw:cell cellNo="0">2</nw:cell>
                    <nw:cell cellNo="1">1</nw:cell>
                    <nw:cell cellNo="2">-1</nw:cell>
                </nw:row>
            </nw:weightMatrix>
            <nw:thresholdVector>
                <nw:threshold nodeNo="0">0</nw:threshold>
                <nw:threshold nodeNo="1">0</nw:threshold>
                <nw:threshold nodeNo="2">0</nw:threshold>
            </nw:thresholdVector>
        </nw:structure>
        <nw:properties>
            <nw:complexity>2</nw:complexity>
            <nw:complexityLevin>8</nw:complexityLevin>
        </nw:properties>
    </nw:network>
    Et voici mon fichier DOM JAVA :
    Code Java : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    import java.io.File;
    import java.io.IOException;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
     
    public class ReadXMLFile_2 {
        public static void main(String[] args) {
            /**
             * Récupération d'une instance de la classe "DocumentBuilderFactory"
             */
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     
            /**
             * Création du Parseur
             */
            try{
                DocumentBuilder builder = factory.newDocumentBuilder();
     
                /**
                 * Création d'un Document
                 */
                Document document = builder.parse(new File("src/network1.xml"));
     
                // Afficher les Informations du Prologue
                System.out.println("*************PROLOGUE************");
                System.out.println("Version : " + document.getXmlVersion());
                System.out.println("Encoding" + document.getXmlEncoding());
                System.out.println("Standalone : " + document.getXmlStandalone());
     
                /**
                 * Affichage Root
                 */
                Element root  = document.getDocumentElement();
                System.out.println("\n" + "*************RACINE************");
                System.out.println(root.getNodeName());
     
                /**
                 * Affichage Données NW:STRUCTURE
                 */
                System.out.println("\n" + "*************NW:STRUCTURE************");
     
                // Afficher nw:nbState
                NodeList nbState = document.getElementsByTagName("nw:nbState");
                Node nbStateChild = nbState.item(0).getFirstChild();
                System.out.println("Nb State : " + nbStateChild.getNodeValue());
     
                // Afficher nw:nodeNumber
                NodeList nodeNumber = document.getElementsByTagName("nw:nodeNumber");
                Node nodeNumberChild = nodeNumber.item(0).getFirstChild();
                System.out.println("Node Number : " + nodeNumberChild.getNodeValue());
     
                // Afficher nw:weightMatrix
                NodeList weightMatrix = document.getElementsByTagName("nw:row");
                Node weightMatrixChild = weightMatrix.item(0).getFirstChild();
                System.out.println("Weight Matrix : ");
     
     
                 /**
                 * Affichage Données NW:PROPERTIES
                 */
                System.out.println("\n" + "*************NW:PROPERTIES************");
     
                // Affichage nw:complexity
                NodeList complexity = document.getElementsByTagName("nw:complexity");
                Node complexityChild = complexity.item(0).getFirstChild();
                System.out.println("Complexity : " + complexityChild.getNodeValue());
     
                // Affichage nw:complexityLevin
                NodeList complexityLevin = document.getElementsByTagName("nw:complexityLevin");
                Node complexityLevinChild = complexity.item(0).getFirstChild();
                System.out.println("Complexity Levin : " + complexityLevinChild.getNodeValue()); 
            }
            catch(final ParserConfigurationException e){
                e.printStackTrace();
            }
            catch(final SAXException e){
                e.printStackTrace();
            }
            catch(final IOException e){
                e.printStackTrace();
            }
        }
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    comment ça "en utilisant les attributs" ?

    Montre-nous ce que tu dois obtenir à la fin. Et n'hésite surtout pas à nous expliquer pourquoi c'est ça que tu devrais obtenir, de cette façon, avec le fichier XML proposé. Je te promets que nous ne pouvons pas lire dans tes pensées, tout ce que tu choisiras de ne pas nous dire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 20
    Par défaut
    Bah en gros j'aimerai prendre les données qu'il y a dans les differents noeuds "nw:row". Chacun de ces noeuds possèdent un attribut tel que : "rowNo" et "cellNo", et justement je voudrais dans mon DOM Java prendre ces valeurs. Je sais qu'il existe getAttributes(), mais ça ne marche pas. Je ne sais pas si c'est mon code sur Java qui est défaillant, ou autre.
    Et u peux le voir dans mon code chaque "row" possède ces "cell", donc j'aimerai faire des différentes parties.
    Mais j'ai déjà du mal à prendre les valeurs des attributs.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je répète ma question, qui me semblait pourtant simple :

    "il faut que tu aies quoi à la fin ?"

    J'attends de toi un texte, qui représente ce que ton programme écrit dans la console quand il est fini. C'est pas compliqué, c'est ce dont tu as besoin, c'est la raison pour laquelle tu essaies de programmer et tu as besoin d'aide.

    A part ça :

    Citation Envoyé par SmashScharrer Voir le message
    mais ça ne marche pas.
    Voilà des mots qu'il est parfaitement inutile d'écrire.

    Voici ce qui aurait eu des chances de servir à quelque chose :

    "J'ai essayé de m'en servir comme ça dans mon programme : <un programme qui essaie de se servir de getAttribute()>.

    Je m'attendais à obtenir <description de ce que tu souhaitais avoir avec>. Mais à la place il se passe <description de ce qui se passe en réalité>."
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 20
    Par défaut
    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
     
    Row 0 :
    Cell 0 : (Valeur)
    Cell 1 : (Valeur)
    Cell 2 : (Valeur)
     
    Row 1 : 
    Cell 0 : (Valeur)
    Cell 1 : (Valeur)
    Cell 2 : (Valeur)
     
    Row 2 : 
    Cell 0 : (Valeur)
    Cell 1 : (Valeur)
    Cell 2 : (Valeur)

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est parfait.

    Pour faire ça il suffit de boucler sur les éléments sélectionnés, au lieu de juste prendre le premier. Comme ça :

    Code Java : 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
    // Afficher nw:weightMatrix
    NodeList weightMatrix = document.getElementsByTagName("nw:row");
    System.out.println("Weight Matrix : ");
     
    for(int i = 0; i < weightMatrix.getLength(); i++) {
      Element row = (Element)weightMatrix.item(i);
      System.out.println("Row " + row.getAttribute("rowNo") + ":");
     
      NodeList cells = row.getElementsByTagName("nw:cell");
      for(int j = 0; j < cells.getLength(); j++) {
        Element cell = (Element)cells.item(j);
     
        String cellNo = cell.getAttribute("cellNo");
        String value = cell.getTextContent();
        System.out.println("Cell " + cellNo + ": " + value);
      }
     
      System.out.println();
    }

    A noter que les classes de org.w3c.dom.* sont assez "lourdingues" et obligent à écrire beaucoup de code qui ne devrait pas être nécessaire. Genre il faut cast les Element, et il n'y a pas de boucle foreach...

    Ce serait plus simple avec la bibliothèque tierce JDOM 2. Par contre, elle oblige à gérer les namespaces XML (parce qu'en principe il faut toujours le faire) alors que org.w3c.dom.* t'a au moins permis de t'en passer. Ca se discute donc.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [DOM] Récupérer les attributs d'un fichier XML en XPATH AVEC DOM
    Par jean22 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 26/06/2013, 16h02
  2. [DOM] récupérer un attribut d'un xml avec DOM
    Par fonkyom dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 11/03/2008, 15h35
  3. [DOM] Récupérer les attributs d'un fichier XML en PHP
    Par ePsymon dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/02/2008, 11h51
  4. [DOM Javascript]Récupérer les attributs
    Par gabychon dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/05/2006, 15h21
  5. [Xsl][Xml]Problème d'attribut
    Par beZor dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/02/2006, 16h43

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