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

Format d'échange (XML, JSON...) Java Discussion :

Remplacer un element dans un fichier xml [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Par défaut Remplacer un element dans un fichier xml
    Bonjour,

    Je veux modifier la valeur d'un attribut d'un élément (partnerLink) dans un fichier XML. la modification se passe bien mais le problème c'est que l'ordre des attributs change ainsi que les éléments se trouvant avant l'élément redondant a la contrainte l'attribut en question est supprimée. Voici le code:
    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
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
     
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
     
    import javax.xml.parsers.*;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
     
    import org.w3c.dom.*;
     
    public class UpdateBPEL {
     
    	static Document document;
    	static org.jdom.Element racine;
     
    	 static void lireFichier(String fichier) throws Exception
    	   {
    	     File file = new File(fichier);
    		  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    		  DocumentBuilder db = dbf.newDocumentBuilder();
    		  document = db.parse(file);
    	   //   System.out.println("Root element : " +document.getDocumentElement().getNodeName());
    	   }
     
    	 static void updateElement(String element,String element1)
    	 {
    		 String ch1,ch2,ch3 ="";  
    		 ch1="http://"+ element;
    	     ch2="http://"+ element1;
    	     long l;
     
     
     
    	             NodeList nodeLst = document.getElementsByTagName("partnerLink"); 	          
     
     
    	            for (int s = 0; s < nodeLst.getLength(); s++) { //import
     
    					    Node fstNode = nodeLst.item(s);
     
    				    if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
     
    				     Element fstElmnt = (Element) fstNode;
     
    				     //System.out.println(" element : " +fstElmnt.getAttributes().getLength());
     
    				     l = fstElmnt.getAttributes().getLength();
    					   //  System.out.println("lol "+l);
    					     for (int h = 0; h <l; h++) { //import
     
    							 Node  fNode= fstElmnt.getAttributes().item(h);
     
     
    						    if (fNode.getNodeType() == Node.ATTRIBUTE_NODE) {
     
    							      Attr fElmnt = (Attr) fNode;
    							      ch3 = fElmnt.getValue();							      
     
    						      if (ch3.equals(ch1)){
    						        	// System.out.println("Result est "+ch3+"fElmnt.getName()=>"+fElmnt.getName()+"ch2 "+ch2);						        	 
    						        	 fstElmnt.setAttribute(fElmnt.getName(), ch2);
     
    						         }
     
    						   }
    						   }
     
    						  }
    	            }
     
    	  }		 
     
     
    	 public static void writeXmlFile(Document doc, String filename) {
    	       try {
    	           // Prepare the DOM document for writing
    	           Source source = new DOMSource(doc);
     
    	           // Prepare the output file
    	           File file = new File(filename);
    	           Result result = new StreamResult(file);
     
    	           // Write the DOM document to the file
    	           Transformer xformer = TransformerFactory.newInstance().newTransformer();
    	           xformer.transform(source, result);
    	       } catch (TransformerConfigurationException e) {
    	       } catch (TransformerException e) {
    	       }
    	   }
     
    	public static void main(String[] args) {
     
     
    		  try
    	       {
    	          lireFichier("E:\\Workspace\\FunctionProcesstest.bpel");
     
     
    	          updateElement("AdderService.wsdl","AdderService1.wsdl");
     
    	          writeXmlFile(document,"E:\\Workspace\\FunctionProcesstest2.bpel");
    	        }
    	       catch (Exception e) {
    			    e.printStackTrace();
    			  }
     
    	}
     
    }
    Le fichier de référence voir pièces jointes.

    Je ne sais ce problème est du a quoi exactement. Merci d'avance pour votre aide

  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
    Pour information, tu utilises DOM, pas JDOM, là.

    En XML les attributs n'ont pas d'ordre, donc c'est normal que ça soit chamboulé.
    Je n'ai pas compris ce qui change avec les éléments, l'histoire d'avant, de contrainte, ces trucs-là, pas clair. En tout cas ton code ne semble changer que des attributs pour des éléments <partnerLink>.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Par défaut
    Bonjour,

    Merci Thelvin pour ta réponse, alors l'idée c'est que dans mon fichier source j'ai 4 élements child "partnerLink" de l'élément "partnerLinks" ayant les mêmes attributs, si je veux changer la valeur d'un attribut de l'élément 3 dans mon cas répondant a la contrainte qui est la valeur de l'attribut égale "AdderService.wsdl". j'ai réussi a remplacer pour cet élément la valeur de cette attribut mais le problème c'est que les élément 1 et 2 cette même attribut est supprimée automatiquement , donc je veux savoir pourquoi l'attribut est supprimée des autres éléments ne vérifiant pas la contrainte déjà citée.

    voici le fichier source FunctionProcesstest:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8" standalone="no"?><process xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:ns0="http://AdderService1.wsdl" xmlns:ns1="http://MultiplierService.wsdl" xmlns:ns2="http://SquareService.wsdl" xmlns:ns3="http://www.example.org/messages" xmlns:ns4="http://ws.apache.org/axis2" xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor" xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace" xmlns:tns="http://FunctionProcess.bpel" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="FunctionProcess" targetNamespace="http://FunctionProcess.bpel">
        <import importType="http://schemas.xmlsoap.org/wsdl/" location="FunctionProcessService.wsdl" namespace="http://FunctionProcessService.wsdl"/>
        <import importType="http://schemas.xmlsoap.org/wsdl/" location="AdderService1.wsdl" namespace="http://AdderService1.wsdl"/>
        <import importType="http://schemas.xmlsoap.org/wsdl/" location="MultiplierService.wsdl" namespace="http://MultiplierService.wsdl"/>
        <import importType="http://schemas.xmlsoap.org/wsdl/" location="SquareService.wsdl" namespace="http://SquareService.wsdl"/>
        <partnerLinks>
            <partnerLink name="SquarePartnerLink" partnerLinkType="ns2:SquareServicePartnerlinkType" partnerRole="squareRole"/>
            <partnerLink name="MultiplierPartnerLink" partnerLinkType="ns1:MultiplierServicePartnerlinkType" partnerRole="multiplierRole"/>
            <partnerLink name="AdderPartnerLink" partnerLinkType="ns0:AdderServicePartnerlinkType" partnerRole="adderRole"/>
            <partnerLink xmlns:tns="http://FunctionProcessService.wsdl" myRole="FunctionProcessServicePortTypeRole" name="FunctionProcessPartnerLink" partnerLinkType="tns:FunctionProcessService"/>
        </partnerLinks>
    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Par défaut
    Re,

    Si j'utilise un fichier xml source volumineux le problème de la suppression de l'attribut pour les autres éléments persiste pour un fichier source contenant que les partnerlink mon programme marche:

    Voici un nouveau fichier source:

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <process
        name="FunctionProcess"
        targetNamespace="http://FunctionProcess.bpel"
        xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace" 
        xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor"
        xmlns:tns="http://FunctionProcess.bpel" xmlns:ns0="http://AdderService.wsdl" xmlns:ns1="http://MultiplierService.wsdl" xmlns:ns2="http://SquareService.wsdl" xmlns:ns3="http://www.example.org/messages" xmlns:ns4="http://ws.apache.org/axis2" xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable">
        <import namespace="http://FunctionProcessService.wsdl" location="FunctionProcessService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
        <import namespace="http://AdderService.wsdl" location="AdderService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
        <import namespace="http://MultiplierService.wsdl" location="MultiplierService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
        <import namespace="http://SquareService.wsdl" location="SquareService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
        <partnerLinks>
            <partnerLink name="SquarePartnerLink" xmlns:ns2="http://SquareService.wsdl" partnerLinkType="ns2:SquareServicePartnerlinkType" partnerRole="squareRole"/>
            <partnerLink name="MultiplierPartnerLink" xmlns:ns1="http://MultiplierService.wsdl" partnerLinkType="ns1:MultiplierServicePartnerlinkType" partnerRole="multiplierRole"/>
            <partnerLink name="AdderPartnerLink" xmlns:ns0="http://AdderService.wsdl" partnerLinkType="ns0:AdderServicePartnerlinkType" partnerRole="adderRole"/>
            <partnerLink name="FunctionProcessPartnerLink" xmlns:tns="http://FunctionProcessService.wsdl" partnerLinkType="tns:FunctionProcessService" myRole="FunctionProcessServicePortTypeRole"/>
        </partnerLinks>
        <variables>
            <variable name="FunctionProcessServiceOperationOutput" xmlns:tns="http://FunctionProcessService.wsdl" messageType="tns:FunctionProcessServiceOperationResponse"/>
            <variable name="MultiplyOutput1" messageType="ns1:multiplyResponse"/>
            <variable name="MultiplyInput1" messageType="ns1:multiplyRequest"/>
            <variable name="FunctionProcessServiceOperationInput" xmlns:tns="http://FunctionProcessService.wsdl" messageType="tns:FunctionProcessServiceOperationRequest"/>
            <variable name="MultiplyOutput" xmlns:ns1="http://MultiplierService.wsdl" messageType="ns1:multiplyResponse"/>
            <variable name="MultiplyInput" xmlns:ns1="http://MultiplierService.wsdl" messageType="ns1:multiplyRequest"/>
            <variable name="SquareOutput" xmlns:ns2="http://SquareService.wsdl" messageType="ns2:squareResponse"/>
            <variable name="SquareInput" xmlns:ns2="http://SquareService.wsdl" messageType="ns2:squareRequest"/>
            <variable name="AddOutput" xmlns:ns0="http://AdderService.wsdl" messageType="ns0:addResponse"/>
            <variable name="AddInput" xmlns:ns0="http://AdderService.wsdl" messageType="ns0:addRequest"/>
        </variables>
     
    </process>
    Merci

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

Discussions similaires

  1. [JDOM] Copie et suppresion d'un element dans un fichier xml
    Par riderfun dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/03/2009, 10h59
  2. Ajout d'un element dans un fichier XML
    Par vacknov dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2007, 10h26
  3. [C# 2.0] Inserer un element dans un fichier Xml
    Par Khrysby dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/09/2006, 17h05
  4. [XSLT] remplacement de chaine dans un fichier XML
    Par Eldarion dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/07/2006, 13h30
  5. Réponses: 3
    Dernier message: 29/06/2006, 16h54

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