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 :

Modification d'un noeud [XPATH]


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é Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut Modification d'un noeud
    Bonjour,

    J'ai un fichier XML ou je souhaite modifier la valeur d'un noeud. J'utilise le package javax.xml.xpath. Je réussi à atteindre le noeud mais je n'arrive pas à modifier son contenu :
    - concaténation de la valeur précédente avec la nouvelle
    - le fichier n'est pas mis à jour.

    Voilà mon code Java :
    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
     
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.net.URL;
    import java.util.Iterator;
     
    import javax.xml.namespace.NamespaceContext;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathExpression;
    import javax.xml.xpath.XPathExpressionException;
    import javax.xml.xpath.XPathFactory;
     
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.w3c.dom.Node;
    import org.xml.sax.InputSource;
    import org.xml.sax.XMLReader;
     
     
    public class NutStyle {
     
    	public NutStyle() throws XPathExpressionException, IOException, JDOMException {
     
            //création de la source
            InputSource source = new InputSource(getClass().getResourceAsStream("./nuts.xml"));
     
            //création du XPath 
            XPathFactory fabrique = XPathFactory.newInstance();
            XPath xpath = fabrique.newXPath();
     
            NamespaceContext namespace = new NamespaceContext(){
            	public String getNamespaceURI(String prefix){
            		if("Filter".equals(prefix)){
            			return "http://www.opengis.net/ogc";
            		}
            		else if("BBOX".equals(prefix)) {
            			return "http://www.opengis.net/ogc";
            		}
            		else if("Box".equals(prefix)) {
            			return "http://www.opengis.net/gml";
            		}
            		else if("coordinates".equals(prefix)) {
            			return "http://www.opengis.net/gml";
            		}
            		else{
            			return "http://www.opengis.net/sld";
            		}
            	}
            	public String getPrefix(String namespaceURI){
            		return null;
            	}
            	public Iterator getPrefixes(String namespaceURI){
            		return null;
            	} 
            };
            xpath.setNamespaceContext(namespace);
     
            XPathExpression exp = xpath.compile("StyledLayerDescriptor:*/NamedLayer:*/UserStyle:*/FeatureTypeStyle:*/Rule:*/Filter:*/BBOX:*/Box:*/coordinates:*");
            Node node = (Node)exp.evaluate(source,XPathConstants.NODE);
            System.out.println("node : "+node.getTextContent());
            node.setTextContent("2,3,4,5");
            System.out.println("node : "+node.getTextContent());        
    	}
     
    	public static void main(String[] args){
    		try {
    			new NutStyle();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    Je joins mon fichier XML (nuts.xml).

    Merci de votre aide !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Bonjour,
    le fichier n'est pas mis à jour.
    Les modifications que tu fais (setTextContent) vont simplement modifier l'arbre en mémoire. Il te reste à écrire toi même cet arbre modifié dans un nouveau fichier.
    Pour celà, il y a des exemples dans la FAQ
    Bonne chance
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  3. #3
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    OK !! En plus je dois juste récupérer le Document, donc sur mon Node modifié je fais node.getOwnerDocument() et je l'ai !

    Mais qu'en est il du fait qu'au lieu de modifier la valuer du noeud, il concatène la valuer précédente avec la nouvelle ??

  4. #4
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Salut,
    il concatène la valuer précédente avec la nouvelle ??
    J'ai pas tout compris
    Tu veux dire prendre le contenu textuel du noeud et y ajouter "2,3,4,5" ?
    Si c'est ça, il te suffit d'utiliser getTextContent() et de faire la concaténation.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  5. #5
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Non moi je veux remplacer la valeur actuelle du noeud "1,45,2,46" par "2,3,4,5" mais la méthode setTextContent("2,3,4,5") me donne comme valeur : "1,45,2,462,3,4,5"...

  6. #6
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Salut,
    setTextContent("2,3,4,5") me donne comme valeur : "1,45,2,462,3,4,5"
    C'est a priori impossible, la méthode setTextContent() remplace totalement le contenu, elle ne fait pas de concaténation. Ou alors tu n'utilises pas les mêmes codes Java et XML que ceux donnés en exemple.
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

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

Discussions similaires

  1. [JAXB] Modification d'un noeud xml
    Par electrovolt dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/07/2012, 10h26
  2. [SimpleXML] SimpleXMLElement modification d'un noeud
    Par alheim dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 21/05/2007, 21h48
  3. [C#] [1.1] Modification d'attributs d'un noeud XML
    Par Sup@Lou dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/08/2006, 16h35
  4. [XML] - Modifer un noeud
    Par jacquesh dans le forum Langage
    Réponses: 1
    Dernier message: 13/07/2006, 09h48
  5. JTree et modification des noeuds
    Par menuge dans le forum Composants
    Réponses: 2
    Dernier message: 05/05/2006, 08h55

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