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

C# Discussion :

Extraction d'une colonne XML en C# [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Extraction d'une colonne XML en C#
    Bonjour,

    J'ai du xml dans une colonne de ma table sql server et jarrive à récupérer certaines infos de cette colonne.

    Je n'arrive pas à récupérer la valeur des champs contact_companyname et contact_siret. Pour le reste j'y arrive. Pouvez vous m'aider à trouver la solution. Ci-dessous mon code C# et la colonne XML.

    Merci pour votre aide.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    using System;
    using System.Data;
    using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
    using Microsoft.SqlServer.Dts.Runtime.Wrapper;
    using System.Xml;
    using System.Linq;
    using System.Xml.Linq;
    using System.Globalization;
    using System.Threading;
    using System.Text;
     
    [Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
    public class ScriptMain : UserComponent
    {
     
        public override void PreExecute()
        {
            base.PreExecute();
            /*
              Add your code here for preprocessing or remove if not needed
            */
        }
     
        public override void PostExecute()
        {
            base.PostExecute();
            /*
              Add your code here for postprocessing or remove if not needed
              You can set read/write variables here, for example:
              Variables.MyIntVar = 100
            */
        }
     
        public override void Entrée0_ProcessInputRow(Entrée0Buffer Row)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
            /*
              Add your code here
            */
     
            XmlDocument xml = new XmlDocument();
            string x = System.Text.Encoding.GetEncoding(1252).GetString(Row.DMESSAGEDETAILS.GetBlobData(0, (int)Row.DMESSAGEDETAILS.Length));
     
            if (x.Contains("(<DateEmission>"))
                System.Windows.Forms.MessageBox.Show(x);
     
     
            XDocument doc = XDocument.Parse(x);
            var reqs = from Donnees in doc.Descendants("Donnees")         
     
               select new
                           {
                               IdentifiantUnique = Donnees.Element("IdentifiantUnique") == null ? "" : Donnees.Element("IdentifiantUnique").Value,
                               CodeProcessus = Donnees.Element("CodeProcessus") == null ? "" : Donnees.Element("CodeProcessus").Value,
                           };
     
            try
            {
                foreach (var req in reqs)
                {
                    //test affichage noeud
                    //System.Windows.Forms.MessageBox.Show(xml.SelectSingleNode("(/Alerte/Donnees/IdentifiantUnique/text())[1]").Value.ToString());
                    Row.IdentifiantUnique = req.IdentifiantUnique.Trim();
                    Row.CodeProcessus = req.CodeProcessus.Trim();
                }
            }
     
     
            catch (System.Xml.XPath.XPathException ePath)
            {
                //System.Windows.Forms.MessageBox.Show(ePath.Message + " : " + ePath.InnerException.ToString());
     
            }
            catch (Exception e)
            {
                //System.Windows.Forms.MessageBox.Show(e.Message + " : " + e.InnerException.ToString());
     
            }
        }
     
    }
    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
    <Alerte>    
      <Donnees>      
        <IdentifiantUnique>PRO_e96d6ffa-ca9e-4226-b937                                </IdentifiantUnique>      
    		<CodeProcessus>EDITION</CodeProcessus>		
    		<DateEmission>2013-09-11T23:35:36</DateEmission>
    		<ArrayOfDonneeFormulaire>
    			<DonneeFormulaire>          
    				<ListDonneesFormulaireAfficher>true</ListDonneesFormulaireAfficher>          
    				<ListDonneesFormulaireCodeQuestion>contact_companyname</ListDonneesFormulaireCodeQuestion>          
    				<ListDonneesFormulaireLibelleQuestion>Nom de l'entreprise : </ListDonneesFormulaireLibelleQuestion>          
    				<ListDonneesFormulaireValeurReponse>PRO BTP</ListDonneesFormulaireValeurReponse>        
    			</DonneeFormulaire>
    			<DonneeFormulaire>          
    				<ListDonneesFormulaireAfficher>true</ListDonneesFormulaireAfficher>          
    				<ListDonneesFormulaireCodeQuestion>contact_siret</ListDonneesFormulaireCodeQuestion>          
    				<ListDonneesFormulaireLibelleQuestion>N° siret : </ListDonneesFormulaireLibelleQuestion>          
    				<ListDonneesFormulaireValeurReponse>12345627800018</ListDonneesFormulaireValeurReponse>        
    			</DonneeFormulaire>
    			<DonneeFormulaire>          
    				<ListDonneesFormulaireAfficher>true</ListDonneesFormulaireAfficher>          
    				<ListDonneesFormulaireCodeQuestion>contact_activity</ListDonneesFormulaireCodeQuestion>          
    				<ListDonneesFormulaireLibelleQuestion>Activité : </ListDonneesFormulaireLibelleQuestion>          
    				<ListDonneesFormulaireValeurReponse>travaux d'installation d'eau</ListDonneesFormulaireValeurReponse>        
    			</DonneeFormulaire>
    		</ArrayOfDonneeFormulaire>
    	</Donnees>  
    </Alerte>

  2. #2
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    ListDonneesFormulaireCodeQuestion est une liste des valeurs tu peux géré tes info en ajoutent une propriété liste

    tu peux faire comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
    List<string> lstNodes= new List<string>();
                // Read until end of file
                while (textReader.Read())
                {
     
                         if(textReader.Node.Name ==  "ListDonneesFormulaireCodeQuestion")
                                lstNodes.add()=textReader.Node.value;
                }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    En fait le xml est contenu dans une colonne d'une table et puis il est analysé.

    De plus, je ne veux récupérer que les valeurs des champs <IdentifiantUnique>,
    <CodeProcessus>, les valeurs <ListDonneesFormulaireValeurReponse> de <ListDonneesFormulaireCodeQuestion> = "contact_companyname" et <ListDonneesFormulaireCodeQuestion> = "contact_siret".

    Je ne veux pas récupérer la valeur <ListDonneesFormulaireValeurReponse> de <ListDonneesFormulaireCodeQuestion> = "contact_activity".

    J'arrive à récupérer les champs <IdentifiantUnique> et <CodeProcessus> avec le code C# mais les autres j'y arrive pas.

  4. #4
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    tu doit donné le path exacte voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListDonneesFormulaireCodeQuestion= Donnees.Element("ArrayOfDonneeFormulaire\DonneeFormulaire\ListDonneesFormulaireCodeQuestion")

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

Discussions similaires

  1. Extraction d'une colonne d'une plage
    Par bsangoku dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/05/2013, 16h34
  2. Extraction d'une colonne de tableau "virtuel"
    Par ploumploum dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/03/2011, 09h26
  3. Réponses: 1
    Dernier message: 15/02/2010, 10h15
  4. Probleme d'extraction d'une colonne VARCHAR2
    Par djam54 dans le forum Sql*Plus
    Réponses: 14
    Dernier message: 06/06/2008, 15h42
  5. Extraction d'une colonne d'une table
    Par stefsas dans le forum SAS Base
    Réponses: 2
    Dernier message: 28/05/2008, 10h15

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