[C# – XML] Parsing d’un fichier XML

Que ce soit pour un fichier de config, une base de données, ou la mise en forme d’un document, le XML est maintenant partout. Il n’est d’ailleurs pas rare de récupérer un fichier XML en appelant un web service par exemple.

Les fichiers XML vont vraiment permettre de structurer, poser le vocabulaire et la syntaxe des données qu’ils vont contenir.

Nous allons voir ici comment réussir un bon parseur de ce genre de fichier, car les possibilités sont nombreuses et nous pouvons nous y perdent.

Il faut surtout bien l’étudier, repérer les différentes balistes et les niveaux puis nous pouvons déjà le charger.

Nous allons voir ici comment parser un fichier XML du type :

image

Il s’agit d’un catalogue de livres avec plusieurs paramètres, le but est à partir de ce fichier, de créer une Datagrid qui contient les différentes données.

Il faut réussir à récupérer les balises <book> une à une. L’avantage de le faire nous même et de pouvoir sélectionner les champs qui nous voulons ou encore de modifier des éléments directement durant le parsing.

1 – Création class Book.cs :

La première chose à faire est de créer une entité “Book” qui contient les différents éléments du fichier XML.

public class Book
{
    #region Properties

    public Book()
    {
        InitDefaultValues();
    }

    protected void InitDefaultValues()
    {
        Author = null;
        Title = null;
        Genre = null;
        Price = null;
        Publish_date = null;
        Description = null;
    }

    public string Author { get; set; }
    public string Title { get; set; }
    public string Genre { get; set; }
    public string Price { get; set; }
    public string Publish_date { get; set; }
    public string Description { get; set; }

    #endregion Properties

}

Jusque là, ça va !

Puis nous pouvons créer notre parseur.

2 – Charger un fichier XML :

Pour cela, rien de plus simple:

XmlDocument document = new XmlDocument();
try
{
    document.Load(filename);
}
catch (Exception)
{
    throw;
}

3 – Retourner la liste de noeud du fichier :

Pour retourner un nœuds puis une liste de nœuds du fichier, concrètement, il s’agit d’avoir la liste du contenu des différents balises <book></book>.

Pour cela nous allons utiliser XmlNode qui représente un nœud unique dans le document XML ainsi que XmlNodeList qui représente une collection ordonnée de nœuds. C’est la fonction node.SelectNodes(“book”) qui permet la sélection du noeud.

public static XmlNodeList DocList(string filename)
{
    XmlDocument document = new XmlDocument();
    try
    {
        document.Load(filename);
    }
    catch (Exception)
    {
        throw;
    }

    XmlNode node = document.DocumentElement;
    try
    {
        XmlNodeList nodeList = node.SelectNodes("book");
        return nodeList;
    }
    catch (Exception)
    {
        throw;
    }
}

Cette fonction va nous renvoyer la bonne liste du noeud <book></book>.

Nous pouvons maintenant prévoir 2 nouvelles fonctions, l’une qui va récupérer un book en fonction de son ID et une autre qui va récupérer toute la liste des books.

4 – Récupération d’un book par id:

public Book BookParsing(string filename, int id)
{
        Book book = new Book();
        XmlNodeList nodeList = DocList(filename);

        try
        {
            book.Author += nodeList[id].SelectNodes("author").Item(0).InnerText;
            book.Title += nodeList[id].SelectNodes("title").Item(0).InnerText;
            book.Genre += nodeList[id].SelectNodes("genre").Item(0).InnerText;
            book.Price += nodeList[id].SelectNodes("price").Item(0).InnerText;
            book.Publish_date += nodeList[id].SelectNodes("publish_date").Item(0).InnerText;
            book.Description += nodeList[id].SelectNodes("description").Item(0).InnerText;
        }
        catch (Exception)
        {
            throw;
        }
        return book;
}

Nous récupérons le noeud d’id choisi puis nous allons chercher nos différents noeuds secondaire pour construire notre objet.

Nous pouvons utiliser soit InnerText, qui vous affichera le contenu entre les balises sous forme de texte (équivant de ToString()), ou alors InnerXml qui vont interprétera le code entre les balises, sont vous avez mis autre chose que du texte simple. A savoir aussi que pour interpréter du html, vous pouvez utiliser

<author><![CDATA[<b>Gamberdella, Matthew</b>]]></author> afin d’avoir votre texte en gras par exemple 🙂

 

5 – Récupération de la liste de books :

public static List<Book> listBooksParsing(string filename)
{
    List<Book> listbooks = new List<Book>();
    Book book = new Book();
    XmlNodeList nodeList = DocList(filename);

    try
    {
        for (int i = 0; i < nodeList.Count; i++)
        {
            book.Author += nodeList[i].SelectNodes("author").Item(0).InnerText;
            book.Title += nodeList[i].SelectNodes("title").Item(0).InnerText;
            book.Genre += nodeList[i].SelectNodes("genre").Item(0).InnerText;
            book.Price += nodeList[i].SelectNodes("price").Item(0).InnerText;
            book.Publish_date += nodeList[i].SelectNodes("publish_date").Item(0).InnerText;
            book.Description += nodeList[i].SelectNodes("description").Item(0).InnerText;
            listbooks.Add(book);
            book = new Book();
        }
    }
    catch (Exception)
    {
        throw;
    }
    return listbooks;
}

Et voilà, le parseur va parcourir chaque nœuds et en instancier la classe, ne pas oublier de la remettre à zéro la classe une fois ajouté dans la liste, sinon la liste ne sera pas bien instanciée 😉

6 – Attachement à une gridView :

image

Le type “XML File” vous demandera une fichier XLS pour définir le découpement de la structure, nous n’en avons donc pas besoin ici, prenez un type “Object”.

image image

Vous avez accès à vos différentes fonctions que vous avez implémenté.

image

Vous pouvez déjà renseigner ici votre fichier XML.

7 – Finish :

image

Et voilà le travail, à vous ensuite de gérer votre propre Template !

Sans oublier le code

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :