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 :

Xml et XPATH en c#


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut Xml et XPATH en c#
    Bonjour à tous,

    Voici mon problème, j'ai :

    - Une liste de Xpath ( genre : Client/nom ou Client/Sexe/Age etc ...) dans une base de donnée

    et j'aimerai pouvoir dans mon appli, charger un xml contenant des informations sur les clients, et, à partir des xpaths de la base, avoir les données selon ces chemin du fichier xml chargé.

    quelqu'un aurait une solution en c# ?

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root.SelectNodes(xpath);
    tuto

  3. #3
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Tu peux utiliser la classe XPathDocument comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var doc = new XPathDocument(fileName);//nom du fichier xml
    ou en lui passant un flux que tu récupères depuis la base de donnée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var doc = new XPathDocument(stream);
    une fois le document est créé tu peux créer une expression xml pour naviguer comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var nav = doc.CreateNavigator();
    var expr = nav.Compile("Client/nom");
    var iterator = nav.Select(expr);
     
    while (iterator.MoveNext())
      {
         var nom = iterator.Current.Value;
      }
    Dans cet exemple je récupère les noms des clients.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup pou vos réponse je vais essayer tout ça

    Merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    J'ai deux questions car je bloque sur ça.

    - Comment je peux charger un fichier xml qui peut se trouver sur le bureau et travailler sur celui-ci pour avoir les données ?


    - J'ai une liste considérable de Xpath et pas mal sont différent, comment créer une liste de celle-ci pour parcourir chacun d'eux pour avoir les informations ?

    Merci

  6. #6
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    pour charger ton fichier dans XmlDocument

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     XmlDocument doc= new XmlDocument();
      doc.Load(Filepath);//chemin de fichier
    et tu peux récupérer les informations par la méthode de chamamo

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Lorsque j'appuie sur mon bouton pour ouvrir un fichier XML j'ai l’erreur :

    Le thread actuel doit être en mode STA (Single Thread Apartment) avant que des appels OLE puissent être effectués. Assurez-vous que votre fonction Main est marquée comme STAThreadAttribute. Cette exception n'est déclenchée que si un débogueur est attaché au processus.

    Quelqu'un aurait une solution ?

    Merci

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Merci azstar pour ta réponse, mais le souci c'est que mes fichiers xml ne sont toujours pas dans le même dossier et donc le chemin peut être différent :s

  9. #9
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    tu peux modifier dans la classe program la fonction main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [STAThread]
     static void Main(string[] args)
                {}

  10. #10
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    tu peux utiliser un openFileDilog pour choisir ton fichier

    voila un exemple de code source

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Du coup j'ai :

    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
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Windows.Forms;
     
    using System.IO;
     
    namespace MXML
    {
        public partial class _Default : System.Web.UI.Page
        {
     
            [STAThread]
            static void Main(string[] args)
            { }
     
     
            protected void Page_Load(object sender, EventArgs e)
            {
     
            }
     
    protected void LoadXML_Click(object sender, EventArgs e)
            {
     
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "Ouvrir un fichier de type XML";
                ofd.Multiselect = false;     //valeur par défaut 
                ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                /* La propriété suivante est un peu plus complexe. 
                 * Chaque extension ou groupe d'extension fonctionne toujours par pair : 
                 * la 1ere partie est ce que l'utilisateur pourra voir dans la boîte, la 
                 * 2e est le filtre que la boîte va utiliser pour trier l'affichage des 
                 * fichiers. Ces 2 groupes sont séparés par le caractère pipe ( | ). Vous pouvez 
                 * ajouter autant de filtres que vous le voulez. */
                ofd.Filter = "Fichiers XML(*.xml) | *.xml| Fichiers HTML (*.html; *.htm) | *.html; *.htm| Tous les fichiers (*.xml; *.html; *.htm) | *.xml; *.html; *.htm";
                ofd.FilterIndex = 2;         //valeur par défaut. L'index commence à partir de 1 
                ofd.ShowHelp = false;        //valeur par défaut 
                ofd.ReadOnlyChecked = false; //valeur par défaut 
                ofd.ShowReadOnly = false;    //valeur par défaut 
                //ShowDialog retourne un DialogResult 
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    //Parce qu'il n'y a qu'un seul fichier qui a pu être sélectionné 
                    string filename = ofd.FileName;
                    //Sinon on aurait du faire 
                    //string[] files = ofd.FileNames; 
     
                    //Traitement 
                }
            } 
     
     
     
     
        }
     
    }
    Mais j'ai toujours la même erreur :

    Le thread actuel doit être en mode STA (Single Thread Apartment) avant que des appels OLE puissent être effectués blablablaaa

  12. #12
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    non la tu es en mode Web donc pas de main dans ton programme moi j'ai cru que tu travail sur un winform !!

    a quelle ligne tu a se probleme ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if (ofd.ShowDialog() == DialogResult.OK)

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Up please

Discussions similaires

  1. [C][XML][Expat][XPATH] une Lib au dessus d'expat ?
    Par chronos dans le forum Bibliothèques
    Réponses: 8
    Dernier message: 08/02/2007, 09h50
  2. [XML/XSL/XPATH]Requete XPATH pour transformation
    Par Le-Cortex dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 04/01/2006, 17h32
  3. [XML] Requête Xpath
    Par Raylemon dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2005, 15h58

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