2011-01-05 12 views
2

Ich habe versucht, meine XML-Datei mit dem Wert des Attributs ohne Glück zu sortieren.Wie XML-Dokument in Linq durch einen Attributwert zu sortieren?

data.Descendants("person").OrderBy(x => x.Attribute("id").Value); 

Daten enthält:

<persons> 
    <person id="1"> 
    <name>Abra</name> 
    <age>25</age> 
    </person> 
    <person id="2"> 
    <name>Cadabra</name> 
    <age>29</age> 
    </person> 
    <person id="4"> 
    <name>Hokus</name> 
    <age>40</age> 
    </person> 
    <person id="3"> 
    <name>Pokus</name> 
    <age>30</age> 
    </person> 
</persons> 

Antwort here nicht für mich arbeiten.

Ich bin mit MVS 2010 für Windows Phone 7.

Ich würde für jede Hilfe dankbar.

-

aktualisieren

Vielen Dank für schnelle Antworten!

juharr eine gute Frage gestellt ... ich hatte erwartet, dass OrderBy würde data ändern. Jetzt weiß ich, dass ich falsch lag.

Ich möchte data ändern, und ich getan habe, wie folgt (dank Matt Lacey):

var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")); 

    data.Descendants("person").Remove(); 
    data.Element("persons").Add(people); 

, aber ich habe immer noch nichts. Data ist leer, es enthält nur <persons />

Ich frage mich, was jetzt falsch ist.


schaffe ich mein Problem zu lösen, indem Sie diesen Code verwenden:

XDocument datatemp = new XDocument(data); 

    var people = datatemp.Descendants("person").OrderBy(x => (int)int.Parse(x.Attribute("id").Value)); 

    data.Descendants("person").Remove(); 
    data.Element("persons").Add(people); 

Ist eine andere Art und Weise (elegantere) zu modifizieren data mit OrderBy statt datatemp zu schaffen?

+1

Können Sie genauer über "kein Glück" sein? – fejesjoco

+2

Erfassen Sie das Ergebnis der 'OrderBy' oder erwarten Sie, dass' data' verändert wird? – juharr

+0

Ich weiß, das ist eine uralte Frage. Sie vermeiden jedoch die Variable datatemp durch Hinzufügen von .ToList() oder .ToArray(), wie Dima sagte. 'stuff.OrderBy (...). ToList()' verhindert, dass IEnumerable beim Hinzufügen zu Personen leer ist. – Mixxiphoid

Antwort

1

Basierend auf der Frage, die Sie verknüpfen, das funktioniert:

var people = from p in data.Elements("person") 
      orderby (string)p.Attribute("id") 
      select p; 

oder

var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")); 

(auf einem Telefon getestet zu bestätigen.)

+0

Dies wird nach string.sort von int.sort sortiert werden? –

1

Ich hoffe, das hilft Ihnen

var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")).ToArray(); 

data.Descendants("person").Remove(); 
data.Element("persons").Add(people); 

Sie nicht für Verwenden Sie die ToArray() -Methode für Ihre people.

Verwandte Themen