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
J'ai une erreur avec l'instruction :
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)));
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:
Merci pour tout aide
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
Partager