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

XSL/XSLT/XPATH XML Discussion :

Traitement d'un noeud contenant du texte XML


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Par défaut Traitement d'un noeud contenant du texte XML
    Bonjour

    Je commence à bricoler un peu avec Xslt.
    J'ai un document XML dont l'un des noeuds contient de l'XML sous forme de texte.
    Exemple:
    <SRM2XML>
    <ID_APP>201105091500206098656937</ID_APP>
    <CLIENT_REF>1234567890</CLIENT_REF>
    <Bureau_Response>
    <id_aplcnt>1</id_aplcnt>
    <ds_set_parm>Company Trading History</ds_set_parm>
    <tx_data_bu>&lt;BCAmessage service-request-id="00762535475" type="RESPONSE"&gt;
    &lt;BCAservice-code&gt;BCA020&lt;/BCAservice-code&gt;
    &lt;BCAservice-code-version&gt;V00&lt;/BCAservice-code-version&gt;
    &lt;/BCAmessage&gt;
    </tx_data_bu>
    </Bureau_Response>
    </SRM2XML>
    J'ai besoin de traiter dans la même feuille XSLT des éléments du node <SRM2XML> et des éléments du node <tx_data_bu>.

    J'ai tenté de charger le contenu de <tx_data_bu> dans une variable:
    <xsl:variable name="xml-string">
    <xsl:value-of select="SRM2XML/Bureau_Response/tx_data_bu"/>
    </xsl:variable>
    <xsl:value-of select="$xml-string/BCAmessage/BCAservice-code"/> ne fonctionne pas.

    J'ai essayé d'utiliser exsl:node-set():
    <xsl:variable name="xml-node">
    <xsl:value-of select="exsl:node-set($xml-string)"/>
    </xsl:variable>
    <xsl:value-of select="$xml-node/BCAmessage/BCAservice-code"/>

    Par contre, si je remplace (avec mon éditeur) &lt; et &gt; par < et >, alors çà fonctionne.

    J'utilise saxon 9.1.0.2 en XSL 2.0
    Merci 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
    Citation Envoyé par babaille Voir le message
    J'ai besoin de traiter dans la même feuille XSLT des éléments du node <SRM2XML> et des éléments du node <tx_data_bu>.
    Pas fait pour. Grosso-modo, tu as là un document XML qui contient un autre document XML. XSLT ne peut pas traiter l'autre tant qu'il reste à l'intérieur du premier. En tout cas pas sans se faire chier grave, à implémenter un parseur XML en XSLT.


    Citation Envoyé par babaille Voir le message
    Par contre, si je remplace (avec mon éditeur) &lt; et &gt; par < et >, alors çà fonctionne.
    Normal. Dans ce cas, c'est un seul document XML, et non pas un contenu dans un autre.

    Ce que je fais dans ces cas-là, je fais un prétraitement avant XSLT : je charge dans une structure DOM, dont j'extrais le contenu de <tx_data_bu>. Je parse ce contenu comme un nouveau document XML, que je charge dans un autre DOM. Puis, j'importe les éléments de cet autre DOM dans le premier, pour remplacer la forme texte.
    J'obtiens ainsi un DOM qui contient la même chose que si on avait "remplacé &lt; par < et &gt, par >", en gérant plusieurs autres choses au passage.
    C'est cela que je passe ensuite à un traitement XSLT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Par défaut
    Merci Thelvin.
    J'avais testé plein de choses sans succès et j'étais venu sur le forum en désespoir de cause.
    Je vais donc me tourner vers l'émetteur de cet XML pour qu'il me fournisse quelque chose de plus conventionnel. Je ne me sens pas pour écrire un parseur en XSLT.

  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
    Si ça se trouve, l'émetteur considère que le contenu <tx_data_bu> n'est pas censé être traité au même niveau que le reste, mais plus tard, en tant que donnée contenue.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. requete contenant du texte et des chiffres
    Par micknic dans le forum Access
    Réponses: 2
    Dernier message: 29/12/2005, 09h28
  2. [JAVA] Problème supression noeud d'un document XML
    Par vero59 dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/08/2005, 16h12
  3. Enlver un noeud dans une structure XML
    Par Sharingan dans le forum ASP
    Réponses: 4
    Dernier message: 20/12/2004, 08h08
  4. [VB.NET] [XML] Suppression d'un noeud dans un fichier XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2004, 11h24
  5. Méthode donnant le numéro de ligne d'un Memo contenant un texte
    Par kilinette dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2004, 10h16

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