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 averti
    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
    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 Expert
    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
    Par défaut
    tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root.SelectNodes(xpath);
    tuto

  3. #3
    Membre émérite 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
    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 averti
    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
    Par défaut
    Merci beaucoup pou vos réponse je vais essayer tout ça

    Merci

  5. #5
    Membre averti
    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
    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 Expert
    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
    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 averti
    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
    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 averti
    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
    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 Expert
    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
    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 Expert
    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
    Par défaut
    tu peux utiliser un openFileDilog pour choisir ton fichier

    voila un exemple de code source

  11. #11
    Membre averti
    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
    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 Expert
    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
    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 averti
    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
    Par défaut
    à la ligne :

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

  14. #14
    Membre averti
    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
    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