xpath sorter XML efter flere nodes

Tags:    c#

Jeg vil gerne sortere en XML fil efter flere forskellige nodes. Min tænkte kode ser sådan ud:

XmlNodeList nodes = doc.SelectNodes("/artist/album[@status='active']" AND "/artist/album/cover[@coverart='yes']" );

Stierne er ikke dem jeg reelt bruger. Men i dette eksempel vil jeg gerne vælge alle aktive albums, som også har "coverart='yes'". Jeg ved at AND ikke er det rigtige ord eller symbol, syntaxen er nok også forkert, men jeg har ledt forgæves for at finde den rigtige metode.

Det ER NØDVENDIGT at jeg kan definere to forskellige stier, for at kunne løse det problem jeg har. Er der nogle der har et forslag? :)



Indlæg senest redigeret d. 08.10.2010 23:53 af Bruger #14393
5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
jeg kender ikke xml, derfor kan jeg ikke lave xpath der udvælger.

Men jeg tror måske du mener:

XmlNodeList nodes = doc.SelectNodes("/artist/album[@status='active' and cover/@coverart='yes']");

så tager den alle <album> hvor @status = active, og som har en childnode <cover> hvor attributten @coverart er yes.

Hvis du vil have alle artister med albums med samme kriterie er det derfor

XmlNodeList nodes = doc.SelectNodes("/artist[album/@status='active' and album/cover/@coverart='yes']");

ellers drop lidt test xml.

vh



kriterierne skal alle være inde i []

XmlNodeList nodes = doc.SelectNodes("/artist/album[@status='active' and /artist/album/cover/@coverart='yes']");


/J



dog sortere den selvfølgeligt ikke, xpath er til at vælge med. desuden er det attributter og ikke noder du "sortere" på.

Sorering foregår sådan her:
http://www.digitaldeposit.net/saravana/post/2007/07/13/Code-Snippet-Sort-nodes-in-an-Xml-Document.aspx



/J



Indlæg senest redigeret d. 10.10.2010 14:26 af Bruger #5789
Hej, tak for svaret.

Jeg mener vælge, når jeg skriver sortere - min fejl :).

Dog kan kan stadigt ikke få valgt de data som opfylder både /artist/album[@status='active' og /artist/album/cover/@coverart='yes', ved at bruge:

XmlNodeList nodes = doc.SelectNodes("/artist/album[@status='active' and /artist/album/cover/@coverart='yes']");



det skal forresten nok være //artist eller /artist//album i de 2 eksempler, for at plukke alle...

Men smid noget xml, og sig hvad du ønsker.



t