Как я могу получить доступ к индексу XML Child, используя XPathNavigator? - PullRequest
2 голосов
/ 10 декабря 2010

Я хочу создать строку компиляции, чтобы использовать ее с XPathExpression. Я уже перешел к подмножеству и создал итератор. Основываясь на текущей позиции этого итератора, я создаю новый currentNode. Теперь я хочу создать точное выражение, которое приводит к этому, и только этот узел, поэтому я могу затем создать итератор, который выбирает только эти дочерние элементы.

    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);
    }

Функция HOWDOIGETTHISNUMBER () является заполнителем для вещи, которую я не совсем понимаю. Я строю свое выражение String на примере списка на Эта страница - "/ catalog / cd [1] выбирает первого дочернего диска cd каталога"

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Совет по оценке XPathExpression был правильным.Различные выражения можно найти здесь .Проблема решена с помощью этого запроса:

    private string HOWDOIGETTHISNUMBER(XPathNavigator theNode)
    {
        XPathExpression query = theNode.Compile("count(preceding-sibling::"+theNode.LocalName+")+1");
        return theNode.Evaluate(query).ToString();
    }
0 голосов
/ 10 декабря 2010
    string myXPathString = "/"+ nav.LocalName + "["+ HOWDOIGETTHISNUMBER() +"]"; 

Вы хотите, чтобы построил и оценил это выражение XPath:

"count(preceding-sibling::*[name()=''" + nav.LocalName +"]"
...