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

XML/XSL et SOAP Discussion :

Parser un gros fichier XML


Sujet :

XML/XSL et SOAP

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Parser un gros fichier XML
    Bonjour,

    Dans le cadre d'un stage, je dois récupérer certaines valeurs d'un fichier XML dont les lignes ressemblent à ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <USER><ID_USER_XXX>XXXX3748</ID_USER_EDA><ID_TRUC_XXX>FR_MM_XX_2_UK_1</ID_TRUC_XXX></USER>
    Il s'agit de récupérer des valeurs pour les envoyer ensuite vers une base de données, mais en aucun cas de modifier le fichier.
    Important: Ce fichier fait 25088 lignes, il doit être traité à partir d'une heure du matin et tout traitement doit être terminé avant 7h du matin.

    On a envisagé XML DOM Document et Linq to XML.
    On m'a aussi suggéré de l'intégrer directement dans une base SQL Server 2008.
    XML Dom me semble peut approprié car le traitement serait trop long, par contre je ne sais pas ce qui serait le plus pertinant entre Linq et l'intégration SQL Server. Ou autre chose?

    Derniere précision: je dévellope en C#.

    Merci d'avance pour votre aide

  2. #2
    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
    XML Dom me semble peut approprié car le traitement serait trop long, par contre je ne sais pas ce qui serait le plus pertinant entre Linq et l'intégration SQL Server.
    Je dirais utilisant Lina et l'intégration SQL Server est une idée prometteuse. Linq to XML est tout à fait capable de trier un document xml d'importance de taille gigabyte. Il se serve de XmlReader ainsi que StringReader qui laisse de trace de mémoire quasi indépendant de la taille du document à trier.

    Voici quelques références msdn:
    http://msdn.microsoft.com/en-us/library/bb387013.aspx
    http://msdn.microsoft.com/en-us/library/bb387035.aspx

    Je prends la dernière lien pour s'amuser et suivis de près pour montrer comment ça peut être fait côté xml. Voilà le code démo exécutable à lui tout seul.
    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
    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
    56
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
     
    using System.Xml;
    using System.Xml.Linq;
    using System.IO;
     
    namespace MSDN {
        public class Demo7491755 {
     
            static IEnumerable<XElement> StreamRootChildDoc(StringReader stringReader) {
                using (XmlReader reader = XmlReader.Create(stringReader)) {
                    reader.MoveToContent();
                    while (reader.Read()) {
                        switch (reader.NodeType) {
                            case XmlNodeType.Element:
                                if (reader.Name == "USER") {
                                    XElement el = XElement.ReadFrom(reader) as XElement;
                                    if (el != null) yield return el;
                                }
                                break;
                        }
                    }
                }
            }
     
            static void Main(string[] args) {
                string markup = @"<Root>
                <USER>
                    <ID_USER_EDA>XXXX3748</ID_USER_EDA>
                    <ID_TRUC_XXX>FR_MM_XX_2_UK_1</ID_TRUC_XXX>
                </USER>
                <USER>
                    <ID_USER_EDA>XXXX3749</ID_USER_EDA>
                    <ID_TRUC_XXX>FR_MM_XX_2_UK_2</ID_TRUC_XXX>
                </USER>
                <USER>
                    <ID_USER_EDA>XXXX3750</ID_USER_EDA>
                    <ID_TRUC_XXX>FR_MM_XX_2_UK_3</ID_TRUC_XXX>
                </USER>
            </Root>";
     
                IEnumerable<string> searchedData =
                    from el in StreamRootChildDoc(new StringReader(markup))
                    select "ID_USER_EDA: "+(string)el.Element("ID_USER_EDA")+"; "+
                        "ID_TRUC_XXX:"+(string)el.Element("ID_TRUC_XXX");
     
                foreach (string str in searchedData) {
                    Console.WriteLine(str);
                }
            }
     
        }
    }
    Au lieu de Console, il suffit de se servir encore "Linq to SQL" avec les données ainsi obtenues via IEnumerable<XElement>.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Syyrius Voir le message
    ...Important: Ce fichier fait 25088 lignes,...
    J'ai eu l'occasion de passer des certifications Microsoft et l'un des cours concerne le traitement des fichiers XML. Ils insistent bien sur le fait que, lorsqu'il y a des gros fichiers à traiter, il faut utiliser la classe XmlReader et non pas DOMDocument.

    En effet, le DOMDocument charge tout le XML en mémoire centrale alors que XMLReader ouvre le fichier et ne récupère en mémoire centrale uniquement que la ligne en cours.

Discussions similaires

  1. Parser un gros fichier XML
    Par gilloddon dans le forum Android
    Réponses: 4
    Dernier message: 29/01/2013, 09h45
  2. Parser un gros fichier xml (>500 Mb )
    Par kenzoshin dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 05/12/2012, 13h58
  3. Parser de gros fichiers XML en JavaSCript via SAX
    Par alatox dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 18/03/2010, 15h57
  4. Réponses: 2
    Dernier message: 25/05/2007, 15h52
  5. [C#] [XML] Traitement de gros fichiers XML (90 Mo)
    Par Pulsahr dans le forum Windows Forms
    Réponses: 20
    Dernier message: 01/12/2005, 14h40

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