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 élément par un texte [JDOM]


Sujet :

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

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 31
    Par défaut Remplacer un élément par un texte
    Bonjour,
    Je viens vers vous car j'ai un doute sur la faisabilité de ce que je souhaite faire.
    J'explique mon problème, j'ai un fichier XML qui est le contenu d'un fichier odt. Dans ce fichier, j'ai besoin de remplacer des balises par des valeurs en texte.
    En utilisant jdom pas de soucis, je supprime l'élément avec un detach() et je rajoute le texte sous la balise du parent.
    Le problème se pose lorsque j'ai un mélange de texte et d'élément comme l'exemple ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <text:p text:style-name="Standard">
            <text:s /> vérifier que <text:database-display text:table-name="ModeleComplet" text:table-type="table" text:column-name="temp" text:database-name="BaseCad">Temp</text:database-display>est supérieur à 70
          </text:p>
    Je veux donc remplacer la chaine <text:database-display text:table-name="ModeleComplet" text:table-type="table" text:column-name="temp" text:database-name="BaseCad">Temp</text:database-display> par la valeur de temp (par exemple 71).
    Et là, je ne vois pas comment lui dire où écrire la chaine, soit mon résultat n'apparait pas, soit elle remplace tout le texte.

    Je ne suis pas très doué en Java, j'espère avoir été assez clair.

    Merci d'avance de vos réponses.

    Laurent
    Pour info voici un bout de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String nomInstance =("//text:database-display[@text:column-name='" + nomChamp + "']");
            	XPath xpath = XPath.newInstance(nomInstance);
            	List<Element> champs = xpath.selectNodes(racine);
            	for(Element champ : champs)
            	{
            		//supprimer l'élément
            		champ.detach();
            		// appliquer le texte nommé valeurChamp... je bloque
     
            	}

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    avant de le détacher, tu regarde à quel index il est dans le parent (via parent.indexOf(champ)) et quand tu veux ajouter le nouvel élement après le détache, tu fait appel à parent.addContent(index,nouvelElement)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 31
    Par défaut
    J'ai essayé cette méthode mais la méthode n'accepte pas de String en nouvel élément

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben non, ca prend un objet Content A oit de construire un objet Content de type #text Je sais pas, a tout hasard, la classe Text ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 31
    Par défaut
    Super, ça fonctionne,
    Merci tchize_

    pour info voici mon 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
    String nomInstance =("//text:database-display[@text:column-name='" + nomChamp + "']");
    XPath xpath = XPath.newInstance(nomInstance);
    List<Element>  champs = xpath.selectNodes(racine);
    for(Element champ : champs)
    {
    Element parent = champ.getParentElement();
    //lister les enfants
    List<Content> detailParent = parent.getContent();
    //clone de la liste pour ne pas modifier son contenu et pouvoir boucler dessus
    List<Content> cloneDetailParent = new ArrayList<Content>(detailParent);
    for (Content enfant : cloneDetailParent)
    {
    //Tester s'il s'agit d'un "element" ou d'un "text"
    if (enfant instanceof Element)
    {
    //Tester si l'élement a les bons atributs
    Element eleCourant = (Element) enfant;
    //teste si l'élement est de type champ (database-display)
    if (eleCourant.getName().equals("database-display")&& eleCourant.getAttributeValue("column-name", nameSpaceFichierXMLText).equals(nomChamp))
    {
    //Transformer la valeur en contenu
    Text contenu = new Text(valeurChamp);
    //Récupération de l'index de l'enfant
    Integer indexElementCourant = parent.indexOf(eleCourant);
    //Supprimer l'élément...
    parent.removeChildren("database-display", nameSpaceFichierXMLText);
    // ....et le remplacer par la valeur du champ
    parent.addContent(indexElementCourant, contenu);
    }	
    }
    }
    }

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

Discussions similaires

  1. [SP-2010] Remplacer un nombre par le texte correspondant
    Par MrMeteo dans le forum SharePoint
    Réponses: 2
    Dernier message: 30/09/2014, 14h46
  2. Réponses: 1
    Dernier message: 09/06/2009, 12h38
  3. [RegEx] Remplacer une image par un texte ou rien
    Par gtraxx dans le forum Langage
    Réponses: 4
    Dernier message: 05/12/2008, 20h57
  4. Réponses: 9
    Dernier message: 22/05/2006, 12h21

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