Oracle:Extraire valeur d'une balise XML
Bonjour,
J'ai un fichier XML EDI, je veux extraire des valeurs des balises avec un script oracle , comme suivant:
je vous donne une partie du fichier, et un exemple de la valeur que je veux le récupéré
Code:
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
| <?xml version="1.0" encoding="ISO-8859-15"?>
<?xml-stylesheet type="text/xsl" href="https://one.edf.fr/sites/default/files/documents/ebxml_edf_visualiseur_v03.05.xsl"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schemasd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schemasd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schemasd:CommonBasicComponents-2" xmlns:ext="urn:oasis:names:specification:ubl:schemasd:CommonExtensionComponents-2" xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schemasd:Invoice-2 UBL-Invoice-2.1.xsd">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:CustomizationID schemeName="Stylesheet" schemeAgencyName="EDF" schemeID="EDF.03.05">EDF-FLX-V19.90</cbc:CustomizationID>
<cbcrofileID>bpid:urn:oasis:names:draft:bpss:ubl-2-sbs-invoice-notification-draft</cbcrofileID>
<cbc:ID>10096545085</cbc:ID>
<cbc:CopyIndicator>true</cbc:CopyIndicator>
<cbc:UUID>0d4a62e0-62d9-489a-8d08-f62ae1498135</cbc:UUID>
<cbc:IssueDate>2019-07-03</cbc:IssueDate>
<cbc:InvoiceTypeCode name="Facture" listName="FFA616-MDL_MONOH_19-0" listAgencyName="ELEC" listID="FEF">380</cbc:InvoiceTypeCode>
<cbc:Note>Origine 2017 de l'électricité vendue par EDF : 85,9% nucléaire, 7,2 % renouvelables (dont 5,3% hydraulique), 1,9% charbon, 3,7% gaz, 1,3% fioul. Indicateurs d'impact environnemental sur www.edf.fr</cbc:Note>
<cbc:Note>Document à conserver 10 ans</cbc:Note>
<cbc:Note>Retrouvez l'ensemble de nos offres, des tarifs et autres informations sur la gestion de votre énergie sur www.edf.fr/collectivites</cbc:Note>
<cbc:Note>Délai de préavis de résiliation du contrat : aucun pour le Tarif Bleu.</cbc:Note>
<cbc:TaxPointDate>2019-07-03</cbc:TaxPointDate>
<cbcocumentCurrencyCode>EUR</cbcocumentCurrencyCode>
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
<cbcaymentCurrencyCode>EUR</cbcaymentCurrencyCode>
<cbc:LineCountNumeric>18</cbc:LineCountNumeric>
<cac:InvoicePeriod>
<cbc:StartDate>2019-09-03</cbc:StartDate>
<cbcescription>Date prochaine facture</cbcescription>
</cac:InvoicePeriod>
<cac:BillingReference>
<cac:AdditionalDocumentReference>
<cbc:ID>1-DZ8-1171</cbc:ID>
<cbc:UUID>225635703350689</cbc:UUID>
<cbc:IssueDate>1977-10-28</cbc:IssueDate>
<cbcocumentTypeCode>SI_2373</cbcocumentTypeCode>
<cbcocumentType>Tarif Bleu pour clients non résidentiels Option Base 9kVA - Prix réglementés</cbcocumentType>
</cac:AdditionalDocumentReference>
</cac:BillingReference>
</Invoice> |
------------------------------------------------------------------------------------------------------------------
les lignes que je veux récupérer avec un select (Oracle) de ce fichier:
Code:
1 2 3
| <cbc:ID>1-DZ8-1171</cbc:ID>
<cbc:UUID>225635703350689</cbc:UUID>
<cbc:IssueDate>1977-10-28</cbc:IssueDate> |
pour avoir les trois valeurs
1-DZ8-1171
225635703350689
1977-10-28
Je vous remercie .
Oracle:Extraire valeur d'une balise XML
Bonjour,
Merci pour la réponse.
Pour répondre à votre question "Ceci dépend bien comment les données du xml sont chargées",
je veux utiliser ce genre de requête:
Code:
1 2 3 4 5 6
| Select Extractvalue(l.column_value,'/Invoice/ID') REF_EXTERNE
From (Select
XmlType(XMLSerialize(document xmltype(bfilename('DIRECTORY_ORACLE','MODELE_EDI.xml'), nls_charset_id('WE8ISO8859P15')))) col_xml From dual
) d,
TABLE(XMLSequence(extract(d.col_xml,'/'))) l;
TABLE(XMLSequence(extract(value(l), '/Invoice'))) e; |
Je veux extraire les données avec la fonction EXTRACVALUE.
J'ai essaye votre solution, mais aucune ligne n'a été récupérée, en replaçant la table gtt_ par
Code:
1 2 3
| (Select
XmlType(XMLSerialize(document xmltype(bfilename('DIRECTORY_ORACLE','MODELE_EDI.xml'), nls_charset_id('WE8ISO8859P15')))) col_xml From dual
) d, |