Hallo,
ich habe folgendes XML (exemplarisch)
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <root> <person> <name>C</name> </person> <person> <name>A</name> </person> <person> <name>B</name> </person> </root> |
Über folgenden Code hole ich mir nach dem Feld
<name/> sortiert alle Personen.
C#-Quelltext
1: 2: 3: 4:
| XPathNavigator navigator = document.CreateNavigator(); XPathExpression expression = navigator.Compile("/root/person"); expression.AddSort("name", XmlSortOrder.Ascending, XmlCaseOrder.LowerFirst, "", XmlDataType.Text); XPathNodeIterator iterator = navigator.Select(expression); |
Die Vorwärtsiteration liefert die Personen in der Reihenfolge
A -> B -> C. Soweit alles korrekt.
Nun muss ich aber während der Iteration allerding immer eine Person
vorausschauen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| foreach(XPathNavigator node in iterator) { if (node.MoveToNext()) { nextNode = node; node = node.MoveToPrevious(); } } |
Mein Problem is nun, daß in
Zeile 7 nicht der nächste Knoten laut Sortierung von
iterator zurück gegeben wird, sondern der nächste Knoten laut Dokumentstruktur. Steht
iterator auf
C wird also nicht
false für
MoveToNext geliefert, sondern der Knoten
A.
Aus Sicht von
XPathNavigator node ist das sicherlich auch korrekt so, nur leider nicht für die Programmlogik
Gibt es hier eine Lösung, möglichst mit
System.Xml....-Mitteln, ohne selbst Domain-Objekte aus den Knoten erstellen zu müssen ?
Grüße
syracus