Parser et modifier un fichier xml (java)

Résolu
<yassou> Messages postés 589 Date d'inscription   Statut Membre Dernière intervention   -  
pegasus620 Messages postés 20 Statut Membre -
bonjour à tous, (je suis complètement coinsée!)

je réalise une application en Java qui traite un fichier xml. au début, je n'ai que des tests à faire en parsant le fichier et en lisant son contenu, j'ai pu le faire grace aux parsers xml de java (SAX). (java.xml.parsers.SAXParsers)

maintenant, je dois modifier son contenu selon les résultats des tests précédants.
mon problème, c'est que je ne sais pas comment faire.

j'aimerais pour commencer essayer de modifier la valeur d'un attribut d'une balise, mais une affectation du genre:
atts.qName(i)=var; //var est de type String
est impossible, à la compilation on me dit :
unexpected type
required: variable
found : value

est ce que pour modifier son contenu je dois l'ouvrir comme un simple fihier texte? (comme BufferedWriter ou FileWriter)
mais j'aimerais profiter des avantages des parsers xml (facilité de la lecture du contenu) et écrire dans le fichier en mème temps

alors qu'est ce que je dois faire?, la moindre petite idée serait la bien venue.

merci d'avance!
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. <yassou> Messages postés 589 Date d'inscription   Statut Membre Dernière intervention   75
     
    résolu en utilisant JDOM, parce que SAX ne permet que la lecture du fichier xml et c'est JDOM qui permet la lecture et la modification du fichier, il y a aussi DOM qui permet la modification mais je n'ai pas su comment l'utiliser
    JDOM est très très facile à utiliser, le fichier est vu comme un arbre et on accède aux noeuds avec des instructions très simples comme nextchild(), ... etc, pour chaque noeud on peut récupérer ses fils dans une liste, les clonner dans un nouveau noeud, modifier les attributs, ou les lire tout simplement
    en bref, la piste à suivre est "la manipulation des fichiers xml avec JDOM"
    j'éspère avoir pu vous aider, n'hésitez pas à poser plus de questions si je n'ai pas été claire
    bon courage
    9
  2. wawaali Messages postés 2 Statut Membre 3
     
    jai un fichier XML, je veux le lire et l'afficher avec java
    voici le code XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Config>
    <Application>
    <name>statdata</name>
    <authType>0</authType>
    <conf>
    <server>statdata</server>
    <url>http://statdata/servlet/conn.ACCES</url>
    </conf>
    <conf>
    <server>stat1</server>
    <url>http://stat1/servlet/conn.ACCES</url>
    </conf>
    <parameter>
    <name>F_USERNAME</name>
    <value>svision</value>
    </parameter>
    <parameter>
    <name>F_PASSWORD</name>
    <value>svision</value>
    </parameter>
    </Application>
    <Application>
    <name>transbscs</name>
    <authType>0</authType>
    <conf>
    <server>...</server>
    <url>http://</url>
    </conf>
    <conf>
    <server>stat2</server>
    <url>http://stat2/servlet/conn.ACCES</url>
    </conf>
    <parameter>
    <name>F_passwd</name>
    <value>svision</value>
    </parameter>
    </application>
    </config>

    jai commencer avec ca :
    public static void main (String argv []){
    try {
    File file = new File("c:\\NV.xml");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(file);

    doc.getDocumentElement ().normalize ();
    System.out.println ("Root element of the doc is " +
    doc.getDocumentElement().getNodeName());

    NodeList listOfapplication = doc.getElementsByTagName("application");
    int totalapplication = listOfapplication.getLength();
    System.out.println("Total no of application: " + totalapplication);

    for(int s=0; s<listOfapplication.getLength() ; s++){

    Node firstapplicationNode = listOfapplication.item(s);

    if(firstapplicationNode.getNodeType() == Node.ELEMENT_NODE){

    Element firstapplicationElement = (Element)firstapplicationNode;

    NodeList firstnameList = firstapplicationElement.getElementsByTagName("name");
    Element firstnameElement = (Element)firstnameList.item(0);

    NodeList textFNList = firstnameElement.getChildNodes();
    System.out.println("name : " +
    ((Node)textFNList.item(0)).getNodeValue().trim());

    NodeList listOfconf= firstapplicationElement.getElementsByTagName("conf");
    int totalconf = listOfconf.getLength();
    System.out.println("Total no of conf: " + totalconf);

    for(int i=0; i<listOfconf.getLength() ; i++){

    Node firstconfNode = listOfconf.item(i);

    if(firstconfNode.getNodeType() == Node.ELEMENT_NODE){

    Element firstconfElement = (Element)firstconfNode;

    NodeList firstserverList = firstconfElement.getElementsByTagName("server");
    Element firstserverElement = (Element)firstserverList.item(0);

    NodeList textNList = firstserverElement.getChildNodes();
    System.out.println("server : " +
    ((Node)textNList.item(0)).getNodeValue().trim());

    NodeList firsturlList = firstserverElement.getElementsByTagName("url");
    Element firsturlElement = (Element)firsturlList.item(0);

    NodeList textURLList = firsturlElement.getChildNodes();
    System.out.println("url : " +
    ((Node)textURLList.item(0)).getNodeValue().trim());

    j'aimerais bien que vous m'aidez le plutot possible et merci d'avance
    2
  3. wawaali Messages postés 2 Statut Membre 3
     
    jai un fichier XML, je veux le lire et l'afficher avec java
    voici le code XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Config>
    <Application>
    <name>statdata</name>
    <authType>0</authType>
    <conf>
    <server>statdata</server>
    <url>http://statdata/servlet/conn.ACCES</url>
    </conf>
    <conf>
    <server>stat1</server>
    <url>http://stat1/servlet/conn.ACCES</url>
    </conf>
    <parameter>
    <name>F_USERNAME</name>
    <value>svision</value>
    </parameter>
    <parameter>
    <name>F_PASSWORD</name>
    <value>svision</value>
    </parameter>
    </Application>
    <Application>
    <name>transbscs</name>
    <authType>0</authType>
    <conf>
    <server>...</server>
    <url>http://</url>
    </conf>
    <conf>
    <server>stat2</server>
    <url>http://stat2/servlet/conn.ACCES</url>
    </conf>
    <parameter>
    <name>F_passwd</name>
    <value>svision</value>
    </parameter>
    </application>
    </config>

    jai commencer avec ca :
    public static void main (String argv []){
    try {
    File file = new File("c:\\NV.xml");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(file);

    doc.getDocumentElement ().normalize ();
    System.out.println ("Root element of the doc is " +
    doc.getDocumentElement().getNodeName());

    NodeList listOfapplication = doc.getElementsByTagName("application");
    int totalapplication = listOfapplication.getLength();
    System.out.println("Total no of application: " + totalapplication);

    for(int s=0; s<listOfapplication.getLength() ; s++){

    Node firstapplicationNode = listOfapplication.item(s);

    if(firstapplicationNode.getNodeType() == Node.ELEMENT_NODE){

    Element firstapplicationElement = (Element)firstapplicationNode;

    NodeList firstnameList = firstapplicationElement.getElementsByTagName("name");
    Element firstnameElement = (Element)firstnameList.item(0);

    NodeList textFNList = firstnameElement.getChildNodes();
    System.out.println("name : " +
    ((Node)textFNList.item(0)).getNodeValue().trim());

    NodeList listOfconf= firstapplicationElement.getElementsByTagName("conf");
    int totalconf = listOfconf.getLength();
    System.out.println("Total no of conf: " + totalconf);

    for(int i=0; i<listOfconf.getLength() ; i++){

    Node firstconfNode = listOfconf.item(i);

    if(firstconfNode.getNodeType() == Node.ELEMENT_NODE){

    Element firstconfElement = (Element)firstconfNode;

    NodeList firstserverList = firstconfElement.getElementsByTagName("server");
    Element firstserverElement = (Element)firstserverList.item(0);

    NodeList textNList = firstserverElement.getChildNodes();
    System.out.println("server : " +
    ((Node)textNList.item(0)).getNodeValue().trim());

    NodeList firsturlList = firstserverElement.getElementsByTagName("url");
    Element firsturlElement = (Element)firsturlList.item(0);

    NodeList textURLList = firsturlElement.getChildNodes();
    System.out.println("url : " +
    ((Node)textURLList.item(0)).getNodeValue().trim());

    j'aimerais bien que vous m'aidez le plutot possible et merci d'avance
    1
  4. &lt;yassou&gt; Messages postés 589 Date d'inscription   Statut Membre Dernière intervention   75
     
    Bonsoir,
    j'ai vu ton code, j'avoue que je ne l'ai pas testé, mais il parait ok, je comprends que tu as utilisé "JDOM" et non "SAX", c'est juste, en quoi consiste ton problème précisément?! qu'est ce qui ne marche pas?
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eyassine
     
    J'ai un projet dont je dois parser le fichier xml(UAProfile).
    Si qlq1 a un code qui permet cela et qui peut m'aider.Merci d'avance.
    1
  7. &lt;yassou&gt; Messages postés 589 Date d'inscription   Statut Membre Dernière intervention   75
     
    problème résolu
    0
    1. Questionneur
       
      Comment ?
      0
  8. nadia hareb Messages postés 122 Statut Membre
     
    bonsoir yasmine,
    je veux bien que tu m"aide a bien maitriser le jdom,c'est koi en fait, peux tu me donner un cour ou des instructions de utiliser
    en fait j'ai un projet complet des fichier en java et un en xml ; mais je ne sais pas comment faire pour le compiler
    pplease help
    0
    1. &lt;yassou&gt; Messages postés 589 Date d'inscription   Statut Membre Dernière intervention   75
       
      pas de panique nadia
      je veux bien t'aider, dis moi seulement en quoi consiste ton travail
      "en fait j'ai un projet complet des fichier en java et un en xml ; mais je ne sais pas comment faire pour le compiler"

      j'ai pas compris ce que tu veux dire par là ?
      0
    2. Hakam ait fattoul
       
      Mersi de verifier le dossier ou se trouve le fichier XML
      0
  9. pegasus620 Messages postés 20 Statut Membre
     
    Vous pouvez utiliser aussi le parseur DOM surtout pour un fichier de petit taille
    c'est un tuto qui explique comment modifier le contenu d'un fichier xml a l'aide du parseur DOM :
    http://sourcetutorial.com/comment-modifier-fichier-xml-en-java-parseur-dom/
    0