Question

Je veux créer un compilestring pour l'utiliser avec un XPathExpression. Je l'ai déjà navigué à un sous-ensemble et ont créé un itérateur. Sur la base de la position actuelle de ce iterator je crée une nouvelle currentNode. Maintenant, je veux créer l'expression exacte Wich Leads à cela, et que ce nœud, donc je peux alors créer un itérateur Wich sélectionne seulement ces enfants.

    public XPathNodeIterator extractSubChildIterator(XPathNavigator currentNode)
    {
        XPathNavigator nav = currentNode.Clone();
        string myXPathString = "/"+ nav.LocalName + "["+ HOWDOIGETTHISNUMBER(nav) +"]";
        while (nav.MoveToParent())
        {
            if (!(nav.Name == ""))
                myXPathString = "/" + nav.LocalName + "[" + HOWDOIGETTHISNUMBER(nav) + "]" + myXPathString;
        }
        myXPathString += "/*";

        XPathExpression expr = nav.Compile(myXPathString);
        return currentNode.Select(expr);
    }

Le HOWDOIGETTHISNUMBER () fonction est l'espace réservé pour la chose que je DonT très bien compris. Je base mon expression sur la chaîne examplelist sur cette page - « / Catalogue / cd [1] sélectionne le premier enfant cd du catalogue "

Était-ce utile?

La solution 2

Le Conseil d'évaluer une XPathExpression était la bonne. Diverses expressions peuvent être trouvées . Problème résolu en utilisant cette requête:

    private string HOWDOIGETTHISNUMBER(XPathNavigator theNode)
    {
        XPathExpression query = theNode.Compile("count(preceding-sibling::"+theNode.LocalName+")+1");
        return theNode.Evaluate(query).ToString();
    }

Autres conseils

    string myXPathString = "/"+ nav.LocalName + "["+ HOWDOIGETTHISNUMBER() +"]"; 

Vous voulez pour construire et évaluer cette expression XPath:

"count(preceding-sibling::*[name()=''" + nav.LocalName +"]"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top