2

XPathExpression で使用する compilestring を作成したいと考えています。既にサブセットにナビゲートし、イテレーターを作成しました。その反復子の現在の位置に基づいて、新しい 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() は、よくわからないもののプレースホルダーです。このページの examplelist に基づいて式文字列を作成します- 「/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 に答える