Sort XML [Résolu]

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

Votre réponse

5 réponses

Meilleure réponse
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscription 16 octobre 2018 Dernière intervention - 29 avril 2012 à 02:36
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

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 29 avril 2012 à 17:10
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

Merci cs_JLuc01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_JLuc01
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 29 avril 2012 à 12:33
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
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscription 16 octobre 2018 Dernière intervention - 29 avril 2012 à 12:46
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
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 29 avril 2012 à 12:49
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

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.