2

我想创建一个编译字符串以将其与 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() 是我不太明白的东西的占位符。我的表达式字符串基于此页面上的示例列表- “/catalog/cd[1] 选择目录的第一个 cd 子项”

4

2 回答 2

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

您想要构造和评估这个 XPath 表达式:

"count(preceding-sibling::*[name()=''" + nav.LocalName +"]"
于 2010-12-10T18:27:38.090 回答
0

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

    private string HOWDOIGETTHISNUMBER(XPathNavigator theNode)
    {
        XPathExpression query = theNode.Compile("count(preceding-sibling::"+theNode.LocalName+")+1");
        return theNode.Evaluate(query).ToString();
    }
于 2010-12-10T19:00:39.690 回答