Avatar billede tommer Nybegynder
30. september 2010 - 16:19 Der er 5 kommentarer og
1 løsning

sortering af xml data

jeg har noget kode som læser xml fra en database ind i et xmldokument.

så spoler jeg noderne igennem og skriver en node tekst ud på min side..

men jeg har brug for at det gøres i en bestemt rækkefølge ud fra datoen i en af child noderne på min node...

har nogen en god ide?
Avatar billede arne_v Ekspert
01. oktober 2010 - 05:34 #1
Det er nok nemmere hvis du skifter far XmlDocument til XDocument.

Demo:

using System;
using System.Linq;
using System.Xml.Linq;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string s = @"<all>
<one>
<lbl>A</lbl>
<val>3</val>
</one>
<one>
<lbl>BB</lbl>
<val>1</val>
</one>
<one>
<lbl>CCC</lbl>
<val>2</val>
</one>
</all>";
            XDocument doc = XDocument.Parse(s);
            foreach(XElement one in doc.Root.Elements("one"))
            {
                Console.WriteLine(one.Element("lbl").Value);
            }
            foreach(XElement one in doc.Root.Elements("one").OrderBy(n => int.Parse(n.Element("val").Value)))
            {
                Console.WriteLine(one.Element("lbl").Value);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede jokkejensen Novice
01. oktober 2010 - 23:53 #2
Jeg er ikke så rå til C#, og kan nok heller ikke løse det så hurtigt som Arne, men jeg ville enhver tid benytte xslt til at transformere xml.

I det du skriver "din side", er vi i web eller app ?

For xslt, kan også let benyttes til at skrive html som xml.

vh
Avatar billede janus_007 Nybegynder
02. oktober 2010 - 08:31 #3
Ja altså hvis det blot er til præsentation, så ville jeg nok også gøre som jokkejensen foreslår.

Noget ala


    <!-- Do a for-each loop.
    Sort descending by price.-->
    <xsl:for-each select="top/theData"
        order-by="-price">

(http://www.developer.com/xml/article.php/600721/Learning-XML--XSLT-Sorting.htm)

Og så bruge XslCompiledTransform:
http://msdn.microsoft.com/en-us/library/system.xml.xsl.xslcompiledtransform.aspx
Avatar billede tommer Nybegynder
05. oktober 2010 - 09:32 #4
Hej gutter, jeg skal nok lige få kigget på denne asap....
Avatar billede tommer Nybegynder
05. oktober 2010 - 16:06 #5
Hej alle,

Tak for de fine kommentarer.
Jeg er klar over at xslt er det rigtige at bruge til rendering...
Men her er det ikke det der er det vigtige.

Jeg har brugt arne_v's ide og det spiller totalt, så kom jeg også igang med linq :-)

Send lige et svar arne_v

Mange tak til alle.
Avatar billede arne_v Ekspert
05. oktober 2010 - 16:24 #6
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester