Lecture d'un fichier xml avec xpath

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 589 fois - Téléchargée 25 fois

Contenu du snippet

Voila le code suite à un de mes posts que jme suis répondus sur le forum :)
Ouais je viens d'apprendre qu'à force d'etre désespérer en cherchant...ben on trouve juste apres...

Ca permet d'aller lire une donnée dans un fichier XML à l'aide des XPath
J'ai volontairement mis la version light vu que je dois simplement lire à un endroit précis et rien d'autres à chaque requete

Apres il est facilement imaginable de faire une classe toute simple...

Source / Exemple :


Fichier XML :
<?xml version='1.0'?>
     <document lang="FR">
         <Title>Liste des phrses pour l'application app en Francais</Title>
         <Page>
             <Login>
                <Label1>
                    <init>Login</init>
                </Label1>
                 <Label2>
                    <init>Mot de Passe</init>
                </Label2>
                 <Label3>
                     <err1>Mauvais Mot de Passe</err1>
                     <err2>Mauvais Login</err2>
                 </Label3>
             </Login>
         </Page>
         <Alert>
             <Erreur1>Connection a la base de donnee refuse.</Erreur1>
         </Alert>
     </document>

Code Source C# :

      XPathDocument doc = new XPathDocument(Server.MapPath("Francais.Xml"));
      XPathNavigator nav = doc.CreateNavigator();
      XPathNodeIterator xit = nav.Select("descendant::Login/Label1/init");
      xit.MoveNext();     // <--- Super utile sinon il vous mets carrement toutes les reponses du fichiers XML....
      Label1.Text=xit.Current.Name + " > " + xit.Current.Value;

Jme sens généreux aujourd'hui, voici une petite classe pour vous :

  public class XMLExplorateur
  {
    protected XPathDocument docNav;
    protected XPathNavigator nav;
    protected XPathNodeIterator xit;
    protected bool initpath=true;

    public XMLExplorateur() { }

    public XMLExplorateur(String path)
    {
      try
      {
        docNav=new XPathDocument(path);
        nav=docNav.CreateNavigator();
      }
      catch
      {
        docNav=null;
        nav=null;
      }
    }

    public bool Init(String path)
    {
      try
      {
        docNav=new XPathDocument(path);
        nav=docNav.CreateNavigator();
      }
      catch
      {
        docNav=null;
        nav=null;
        return false;
      }
      return true;
    }
    
    public String ValueOf(String Item)
    {
      if (nav==null) return "Erreur Navigateur null";
      String tmp="descendant::"+Item;
      try
      {
        xit=nav.Select(tmp);
        if (xit.MoveNext()) tmp=xit.Current.Value;
        else tmp="null";
      }
      catch
      {
        tmp="null";
      }
      return tmp;
    }
  }

Exemple d'utilisation :
...
protected XMLExplorateur xe=new XMLExplorateur();
   private void Page_Load(object sender, System.EventArgs e)
   {
      xe.Init(Server.MapPath(@"Lang\Francais.Xml"));
      Label1.Text=xe.ValueOf("Login/Label1/init");
   }
...
Remarque :
  Attention XML est très capricieux...Il est senssible à la casse (majuscule/minuscule)
  et en plus, en cas d'erreur Line 1 position 4...Ben il faut simplement retirer le premier espace avec notepad ou wordpad

Conclusion :


Voila.
Comme dab si il y a des reflexions ou autres n'hésiter pas...

++

A voir également

Ajouter un commentaire

Commentaire

visiorach
Messages postés
5
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2008

Salut à l'auteur
Ta classe marche niquel. je l'ai utilisée pour gagner du temps. et de toutes mes recherches sur les lectures de fichier xml je trouve que celle-ci sort du lot.
Merci pour le service

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.