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

PostgreSQL Discussion :

Problème résultat avec balise XML


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut Problème résultat avec balise XML
    Bonjour,

    Quand je fais ma requête postgres en sorti de celle-ci j'ai les balises XML dans le nom de naissance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT
        unnest(xpath('//nomNaissance/text()', xmlparse(DOCUMENT encode(msg, 'escape'))))::text nomNaissance
    From table1;
    Résultat en sorti:
    "<![CDATA[TOTO ]]>"

    Je souhaiterais enlever toute la partie en rouge pour ne garder que le nom de naissance, je pensais que mon code le faisait bien mais à priori non

    Auriez-vous une idée svp ?

    Merci à tous.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 938
    Points : 1 921
    Points
    1 921
    Par défaut
    Peux-tu poster une exemple de xml pour qu'on puisse faire un test ?
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  3. #3
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Bonjour philouZ,

    Voici l'extract demandé :

    Code XML : 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
    <?xml version="1.0" encoding="UTF-8"?>
    	<domaine code="PERSONNE">
    		<identifiantTransaction>AUDIT_PERSONNE</identifiantTransaction>
    		<donnees>
    			<operation codeOperation="ALIMENTATION" version="1.0">
    				<listePersonnes>
    					<personne>
    						<nomNaissance><![CDATA[TITI]]></nomNaissance>
    						<prenoms><![CDATA[TOTO]]></prenoms>
    						<sexe><![CDATA[M]]></sexe>
    						<dateNaissance><![CDATA[1900-01-01]]></dateNaissance>
    						<nomUsage><![CDATA[TITI]]></nomUsage>
    						<civilite><![CDATA[M.]]></civilite>
    						<methodesDeContact>
    						</methodesDeContact>
    						<rattachements>
    							<rattachement>
    								<roles>
    									<role>
    										<personneRessource>
    											<elementsDeCarriere>
    												<elementCarriere>
    													<discipline><![CDATA[1234]]></discipline>
    													<status><![CDATA[H01]]></status>
    													<temoin><![CDATA[false]]></temoin>
    												</elementCarriere>
    											</elementsDeCarriere>
    											<affectations>
    												<affectation>
    													<quotite>100</quotite>
    													<contrat><![CDATA[CO_001]]></contrat>
    												</affectation>
    											</affectations>
    										</personneRessource>
    									</role>
    								</roles>
    							</rattachement>
    						</rattachements>
    						<extensionLocale>
    							<colonne>
    								<nom>actif</nom>
    								<type>BOOLEAN</type>
    								<valeur>
    									<valeurBoolean><![CDATA[true]]></valeurBoolean>
    								</valeur>
    							</colonne>
    							<colonne>
    								<nom>matriculeApplicationProprietaire</nom>
    								<type>STRING</type>
    								<valeur>
    									<valeurString>1234</valeurString>
    								</valeur>
    							</colonne>
    						</extensionLocale>
    					</personne>

    Merci par avance de tes illuminations

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Résultat en sorti:
    "<![CDATA[TOTO ]]>"
    Ce genre de sortie est absolument insensée. CDATA n'a pas de sens hors de xml propre.

    Heuresement, je crois qu'il existe l'extension xml2 qui a grandement amélioré ce comportement de l'engin par défaut.

    D'abort, vous importez l'extension xml2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creation extension if not exists xml2;
    Puis, dans ce cas-ci, on peut utiliser la fonction xpath_string() un peu comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT
        xpath_string(xmlserialize(document xmlparse(DOCUMENT encode(msg, 'escape'))) as text, '//nomNaissance/text()') nomNaissance
    From table1;
    Les deux arguments, je n'invente rien: vous devrez vous assurer qu'ils soient corrects. edit En regardant de plus près, le premier argument devrait simplement DOCUMENT si il est un texte et ça suffit pour xpath_string(). edit2 Puisque je ne suis pas suis l'argument DOCUMENT encode() etc, peut-être je suis plus assuré de mettre dessus xmlseriailize(); et comme ça, je me sens plus tranquille.

    Voilà et essayez-le !

  5. #5
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Merci Tsuji pour ta réponse je vais regarder en détail la doc dans un premier temps associé à ta réponse et voir ce que je peux faire

    Petit bémol, moi je requête uniquement sur pgadmin le fichier xml source est généré par une application éditeur dont je n'ai pas les accès sinon ce n'est pas fun il n'y aurait pas de challenge

  6. #6
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    C'est bon j'ai réussi en passant par les regex

    Merci à tous pour votre aide

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je suis à l'aise à regex, mais, pour les cas comme ceci en xml, je pense ce n'est pas une solution acceptable. J'entends très bien que vous faites comme vous voulez, bien entendu.

    Si le document fait CDATA <![CDATA[TOTO ]]> avec un balise nomNaissance, et fait avec un autre sans en texte "TO &amp; TA", alors, la sortie devrait "TO &amp; TA" au lieu de "TO & TA". Et on fait un autre regex pour ça?! Non, c'est embêtant pour dire le moins; et c'est une fausse solution.

  8. #8
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Merci tsuji pour ta remarque
    Dans mon cas les données sont toujours formatées de cette manière, ces données sont le nom et prénom.

    Je te remercie d'avoir pris le temps de me répondre et de m'avoir remonté ce cas alerte.

    Bonne journée.

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

Discussions similaires

  1. Problème PDF avec balise <object>
    Par carlito-90 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 09/08/2012, 22h07
  2. [EAR] Problème JBoss avec web.xml
    Par toufik3119 dans le forum Java EE
    Réponses: 2
    Dernier message: 07/08/2011, 23h24
  3. [XSLT] parcours et affichage avec balises xml imbriquées
    Par marochlo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/11/2010, 19h25
  4. [Tableaux] Pb avec balise XML
    Par Kiwimenthe dans le forum Langage
    Réponses: 1
    Dernier message: 16/08/2007, 10h35
  5. Problème CDATA dans balise XML
    Par charliejo dans le forum Dynamique
    Réponses: 4
    Dernier message: 12/01/2007, 13h04

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