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 :

[C#] Comment trier un contenu XML ?


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut [C#] Comment trier un contenu XML ?
    Bonjour tout le monde,

    j'ai chargé dans un objet de type XmlDocument un fichier XML qui a la structure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <TabBem>
    <Bem>Remarques standard</Bem>
    <Bem>Affaire terminée</Bem>
    ....
    </TabBem
    Je dois trier le contenu des balises <Bem> par ordre alphabétique. Est-ce que quelqu'un connaîtrait un moyen de pouvoir faire ceci avec XPath ou autre?

    Par avance, merci pour votre aide!

    Cédric

  2. #2
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Salut,
    à ta place j'utiliserai un DataSet (.ReadXml, filtrage des rows, .WriteXml...).
    Tu peux trouver de nombreux post sur le sujet dans le forum.
    Pensez aux règles et au qui rime avec !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Salut Toniolol,

    l'ennui est que la structure de mon fichier est comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TabBem>
    <Bem>
    <fra>Remarques standard</fra>
    <ger>Standard Bemerkungen</ger>
    </Bem>
    <Bem>
    <fra>Affaire terminée</fra>
    <ger>abgeschrieben</ger>
    </Bem>
    ....
    </TabBem
    et au final, je dois livrer avec le texte en fonction de langue et trier dans l'ordre alphabétique le structure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TabBem>
    <Bem>Remarques standard</Bem>
    <Bem>Affaire terminée</Bem>
    ....
    </TabBem>
    Si je prends ma structure initial directement dans dans un DataSet, j'ai <Bem> comme Datatable et non <TabBem> comme je le pensais. Comment je peux structurer le DataSet pour que j'ai TabBem comme table afin que je puisse un select?

    D'avance, merci pour ton aide!

    Cédric

  4. #4
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    En effet je n'avais pas compris comme ça.
    Là de suite je sèche..., si quelqu'un peut nous aider
    Pensez aux règles et au qui rime avec !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Salut Toniolol,

    Par rapport à mon dernier message, le "TabBem" correspond au nom de mon DataSet et "Bem" correspond au nom de mon DataTable et en fait j'ai bien toutes mes données chargées dans dans "Bem", donc je peux faire un select et un sort qui est comme suit pa exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataRow[] listRow = table.Select(ger <> '' or ger = '', ger ASC");
    Comme je dois tout prendre les ééments "ger" et les trier, je dois faire une condition comme décrite ci-dessus, car je ne peux apparemment utiliser le tri tout seul. Si tu connais une meilleure façon de faire dit-le moi!

    Maintenant pour sélectionner que les éléments "ger" dans ma listRow, j'ai fait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    DataRow row = listRow[indice];
    nodeBem.InnerXml = row.ItemArray[1].ToString();
    ...
    Est-ce que tu connaîtrais un moyen de faire et de pouvoir indiquer "ger" au lieu de mettre [1] comme condition pour sélectionner les données de la colonne "ger"?

    Par avance, je te remercie de ton aide!

    Cédric

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    Moi je serais toi, je regénererais un fichier XML à l'aide de XSLT. le XSLT te permettra de manipuler comme tu veux du XML...

  7. #7
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    en indiquant le nom de la colonne peut-etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataRow row = listRow[indice];
    nodeBem.InnerXml = row["ger"];
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  8. #8
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Datatable.Select pour filter ta langue

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Bonjour à tous,

    pour "The Badger Man", merci pour le conseil, effectivement cela fonctionne comme je le veux en faissant comme tu la décrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataRow row = listRow[indice];
    nodeBem.InnerXml = row["ger"];
    Pour Royd938, oui je pense que cela fonctionnerait certainement très bien en faisant un fichier XSLT qui transforme mon fichier XML au travers des classesP Xslttransform ou complieTransform. Mais du point de vue performances quel serait le mieux entre un DataSet et Xslttransform, là je ne suis pas assez spécialiste pour y répondre!

    Pour Mose, j'utilise déjà Datatable.Select pour filter ma langue, comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataRow[] listRow = table.Select(ger <> '' or ger = '', ger ASC");
    Ce qui m'ennue, c'est je dois faire cette expression: ger <> '' or ger = '', car sinon le méthode select ne me permet pas de faire de tri. Si tu connais un meilleur moyen de faire, dit-le moi!

    Pour ma part, en l'état actuel, mon problème est résolu! Merci à tous pour vos coseils et votre aidre!

    Cédric

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/06/2008, 08h24
  2. [SimpleXML] Trier le contenu d'un flux XML
    Par Paulux1 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/07/2007, 10h45
  3. Réponses: 1
    Dernier message: 27/05/2006, 23h13
  4. Réponses: 2
    Dernier message: 31/10/2005, 22h04
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

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