Sort XML [Résolu]

Messages postés
208
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
- - Dernière réponse : cs_JLuc01
Messages postés
208
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
- 29 avril 2012 à 17:10
Bonsoir,

J'essaye de mettre en ordre un fichier XML par l'attribut "ID".
Mais je bloque. Erreur sur la ligne "newNodes": At least one object must implement IComparable.
Voila ce que j'ai fait jusqu'a maintenant.

 Private Function orderXML(ByVal myXMLDoc As XmlDocument) As XmlDocument
        ' Create an xmlString (XElement)
        Dim xmlString As XElement = XElement.Load(myXMLDoc.CreateNavigator.ReadSubtree)   'Converts an XmlElement to an XElement
        Dim xElemLINQ = From x In xmlString.<Design> Order By x.Attribute("ID")
        Dim newNodes = xElemLINQ.ToArray
        xmlString.Elements.Remove()
        For Each x As XElement In newNodes
            xmlString.Add(x)
        Next
        myXMLDoc.ReadNode(xmlString.CreateReader)   'Converts an XElement to an XmlElement
        Return myXMLDoc
    End Function


Mais, je crois que je fais trop complique ou bien je melange tout.
Si quelqu'un a une idee, sinon peut-etre avec une bonne nuit de sommeil, j'y verrais plus clair.

A+
JLuc01
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133
3
Merci
Bonjour,

Et si à la place de :
x.Attribute("ID")
Tu mets :
x.Attribute("ID").InnerText (ou approchant)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
208
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
3
Merci
Bon, j'ai finalement trouve.
Cependant, je ne suis pas sur que ce code soit genial.
Si vous avez de meilleures idees ou un moyen de simplifier ce code, faites le moi savoir.
 Private Function orderXML(ByVal myXMLDoc As XmlDocument) As XmlDocument
        ' Create an xmlString (XElement)
        ' And converts an XmlElement (in xmlDocument myXMLDoc) to an XElement
        Dim xmlString As XElement = XElement.Load(myXMLDoc.CreateNavigator.ReadSubtree)
        Dim xElemLINQ = From x In xmlString.<Design> Order By x.Attribute("ID").Value
        Dim newNodes = xElemLINQ.ToArray
        xmlString.Elements.Remove() 
        For Each x As XElement In newNodes
            xmlString.Add(x)
        Next
        ' newXmlDoc.ReadNode(xmlString.CreateReader) to converts an XElement to an XmlElement
        Dim mySortedXMLDoc As New XmlDocument
        Dim xmlOutput As XmlElement = CType(mySortedXMLDoc.ReadNode(xmlString.CreateReader), XmlElement)
        ' Create a StringWriter associated to a XmlTextWriter
        Dim sw As New StringWriter
        Dim xw As New XmlTextWriter(sw)
        ' Then, write the XML to the XMLTextWriter and use the StringWriter to make it a temporary String
        xmlOutput.WriteTo(xw)
        Dim tempString As String = sw.ToString()
        ' Finally, load the temporary String into the original XmlDocument myXMLDoc
        myXMLDoc.LoadXml(tempString)
        Return myXMLDoc
    End Function

Merci,

A+
JLuc01

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_JLuc01
Messages postés
208
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
0
Merci
Bonjour,

Comme toujours, tu pointes au bon endroit.
Cependant, 'InnerText' n'est pas accepte par l'intellisense VS.net; par consequent, j'ai essaye la propriete 'Value' et je n'ai plus d'erreur.

Mais, ma fonction ne marche pas: pas de tri avec l'attribut ID!
Je continue donc a chercher...
Merci,
JLuc01
Commenter la réponse de cs_JLuc01
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133
0
Merci
Bonjour,

Étonnant qu'il n'y ait pas de tri.
http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/7c4169c4-4c09-4aa2-9a31-17f0f8c985f7/
http://stackoverflow.com/questions/2208844/how-to-sort-xml-in-linq-c-sharp-by-an-attribute-value-also-mvc

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
208
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
0
Merci
Re-Bonjour,

Une precision: le tri se fait bien (verifie en mode debug) jusqu'au Next.
La ligne suivante "ne marche pas":
myXMLDoc.ReadNode(xmlString.CreateReader)   'Converts an XElement to an XmlElement


Donc, un probleme de conversion.
Je cherche toujours.

A+
JLuc01
Commenter la réponse de cs_JLuc01