Bonjours,

J'ai un fichier XML que je veux trier avant de chercher les element precedentes et suivante de l'element courante

Mon idée consiste à recuperer une partie du document suivant un premier critère (de selection et trie) avec XPathDocument

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 XPathExpression expr = null;
 expr = nav.Compile("/CATALOG/PRODUCTS/PROD[number(concat(substring  
         (@RELEASED,1,4), substring(@RELEASED,6,2), substring(@RELEASED, 
         9,2))) <= " + DateTime.Now.ToString("yyyyMMdd") + " and 
         @RESTRICTED=0]");
expr.AddSort("@DATE1", XmlSortOrder.Descending, XmlCaseOrder.None, 
                 String.Empty, XmlDataType.Number);
expr.AddSort("@DATE2", XmlSortOrder.Descending, XmlCaseOrder.None, 
                 String.Empty, XmlDataType.Number);
 
XmlDocument catalog = GetXML();
XPathNavigator nav = catalog.CreateNavigator();
 // Maintenant j'applique mon critère (qui est une XPathExpression sur le doc)
XPathDocument doc = new XPathDocument(new XmlNodeReader
                                  (catalog.SelectNodes(expr)));
J'ai une erreur avec l'instruction :
XPathDocument doc = new XPathDocument(new XmlNodeReader
(catalog.SelectNodes(expr)));


Comment peut-on proceder ?

pour le reste du code, j'applique une seconde critère pour recuprer le noeud courrant afin de chercher le precedent et le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
int current = ...
XPathNodeIterator ite = nav.Select("/catalog/product/prod
                                [@id="+current+"]");
ite.MoveNext();
string value = ite.Current.Value;//current value
ite.Current.MoveToNext();
string next = ite.Current.Value;//next value 
if (value != next)
 {
     ite.Current.MoveToPrevious();
     ite.Current.MoveToPrevious();
 }
   else
     {
         ite.Current.MoveToPrevious();
         next = null;
     }
    string previous = ite.Current.Value;//previous value
Merci pour tout aide