Sort XML

Résolu
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 - 29 avril 2012 à 01:35
cs_JLuc01 Messages postés 206 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

5 réponses

NHenry Messages postés 15111 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 avril 2024 159
29 avril 2012 à 02:36
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
3
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
29 avril 2012 à 17:10
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
3
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
29 avril 2012 à 12:33
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
0
NHenry Messages postés 15111 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 avril 2024 159
29 avril 2012 à 12:46
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
29 avril 2012 à 12:49
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
0
Rejoignez-nous