Bonjour à tous,
Voici le contexte de mon problème.
J'ai réalisé un import d'un fichier XML en WebDev 19. Cet import marchait très bien jusqu'au jour où le fichier est passé de 800 Ko à 50 Mo, de 5 000 lignes à plus de 310 000...
Moi aussi j'ai eu mal en l'apprenant. L'import met maintenant 6h pour être traité. Ce qui m’explose tous les TIME OUT.
Après des jours de recherche, de test j'ai trouvé un script SQL qui me permet de traiter le fichier complet en moins de 5 minutes.
Le problème est que je n'arrive pas à définir le NAMESPACE.
Le script est fonctionnel si je retire du fichier :
Quelqu'un aurait-il une solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part xmlns="http://developer.cognos.com/schemas/xmldata/1/"
Voici un extrait du fichier :
et voici le script SQL permettant de le traiter
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 <?xml version="1.0" encoding="utf-8"?> <dataset xmlns="http://developer.cognos.com/schemas/xmldata/1/" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> <!-- <dataset xmlns="http://developer.cognos.com/schemas/xmldata/1/" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://developer.cognos.com/schemas/xmldata/1/ xmldata.xsd" > --> <data> <row> <value>1</value> <value>2</value> <value>3</value> <value>4</value> </row> <row> <value>5</value> <value>6</value> <value>7</value> <value>8</value> </row> </data> </dataset>
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 DECLARE @XmlDocumentHandle int DECLARE @XmlDocument varchar(max) declare @myDoc xml ;WITH XMLNAMESPACES('http://developer.cognos.com/schemas/xmldata/1/' as dc) SELECT @myDoc = BulkColumn FROM OPENROWSET(BULK 'C:/test.xml' , SINGLE_CLOB) AS X -- Create an internal representation of the XML document. EXEC sp_xml_preparedocument @XmlDocumentHandle OUTPUT, @myDoc--, '<dataset xmlns="http://developer.cognos.com/schemas/xmldata/1/"/>' -- Execute a SELECT stmt using OPENXML rowset provider. SELECT * FROM OPENXML (@XmlDocumentHandle, '/dataset/data/row',2) WITH (value1 varchar(10) 'value[1]', value2 varchar(10) 'value[2]', value3 varchar(10) 'value[3]', value4 varchar(10) 'value[4]') EXEC sp_xml_removedocument @XmlDocumentHandle
Partager