我想创建一个与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);
    }

doigetthisnumber()的功能是我不完全了解的东西的占位符。我将我的表达字符串基于审查列表 这一页 - “/目录/CD [1]选择目录的第一个CD儿童”

有帮助吗?

解决方案 2

评估X Pathexpression的提示是正确的。可以找到各种表达 这里. 。使用此查询解决的问题:

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

其他提示

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

你要 构建和评估此XPath表达:

"count(preceding-sibling::*[name()=''" + nav.LocalName +"]"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top