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

SQL Oracle Discussion :

regexp_substr - xmlns dans la balise


Sujet :

SQL Oracle

  1. #1
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut regexp_substr - xmlns dans la balise
    Bonjour à tous,

    J'ai un xml dont j'extraie la valeur de certains tags avec regexp_substr.

    Dans le xml, j'ai :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <gen:PeriodStart1>2020-04-01</gen:PeriodStart1>
    <gen:PeriodEnd1>2022-04-30</gen:PeriodEnd1>

    Mon sql est celui-ci :

    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
    WITH x AS
       (
    	SELECT 
    		od.DOCUMENT_XML
    		,dc.FILE_NUMBER AS FileN
    	FROM DOCUMENT_CONVERSATIONS dc
    	INNER JOIN OUTGOING_DOCUMENTS od on dc.DOCUMENT_CONVERSATION_ID = od.DOCUMENT_CONVERSATION_ID
    	INNER JOIN OUTGOING_DOCUMENT_COPIES odc on od.OUTGOING_DOCUMENTS_ID = odc.OUTGOING_DOCUMENTS_ID
    	WHERE to_char(odc.SEND_DATE,'yyyymm') = ('202205')
    	AND dc.FILE_NUMBER in (3000046, 3000125)
       )
     
    SELECT 
    	x.DOCUMENT_XML 
    	,FileN
    	,regexp_substr(x.DOCUMENT_XML, 'PeriodStart1>([0-9\-]{4,10})' , 1 , 1, 'i' , 1 ) AS debut
    	,regexp_substr(x.DOCUMENT_XML, 'PeriodEnd1>([0-9\-]{4,10})' , 1 , 1, 'i' , 1 ) AS fin
    FROM x
    ;

    Tout fonctionne pour le mieux jusqu'à... cette balise :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <gen:SumTotal xmlns:gen="http://www.RRKKWW.be/document/general">1981.24</gen:SumTotal>

    Pouvez-vous me dire comment je peux m'y prendre ? Je sais que mon soucis vient de 'xmlns:...' mais je n'arrive pas à le résoudre.

    Merci d'avance pour le coup de mains,

  2. #2
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    J'ai changé de façon de procéder et cela fonctionne avec :

    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
    WITH x AS 
    	(
    		SELECT 
    			--xmltype.createxml(REPLACE(od.document_xml, ':')) xml_data
    				xmltype.createxml(REPLACE(REPLACE(od.document_xml, ' xmlns:gen="http://www.RRKKWW.be/document/general"'), ':')) xml_data
    			,dc.FILE_NUMBER AS FileN
    		FROM DOCUMENT_CONVERSATIONS dc
    		INNER JOIN OUTGOING_DOCUMENTS od on dc.DOCUMENT_CONVERSATION_ID = od.DOCUMENT_CONVERSATION_ID
    		INNER JOIN OUTGOING_DOCUMENT_COPIES odc on od.OUTGOING_DOCUMENTS_ID = odc.OUTGOING_DOCUMENTS_ID
    		WHERE to_char(odc.SEND_DATE,'yyyymm') = ('202205')
    		AND dc.FILE_NUMBER in (3000046, 3000125)
    	)
    SELECT 
    	x.FileN
    	,xt.Start_Period
    	,xt.End_period
    	,TO_NUMBER(REPLACE(xt.sum_total, '.', ',')) AS sumtotal
    FROM x, XMLTABLE('*'
          	PASSING x.xml_data
          	COLUMNS 
    			Start_Period	VARCHAR2(50) PATH 	'//genPeriodStart1',
            	End_period		VARCHAR2(50) PATH	'//genPeriodEnd1',
            	Sum_Total		VARCHAR2(50) PATH	'//genSumTotal'
                ) xt
    ;

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

Discussions similaires

  1. obliger de definir un xmlns vide dans ma balise
    Par snopims_ dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 07/01/2008, 22h47
  2. [DIV] contenir les elements dans la balise div
    Par kemodo dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 11/10/2004, 20h43
  3. [XSL]faire une balise dans une balise??? (ComboBox)
    Par rastoix dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2003, 08h34
  4. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24
  5. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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