Xpathnavigatorを使用してXML子供のインデックスにアクセスするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4411809

質問

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()は、私が十分に得ていないもののプレースホルダーです。 ExamPlelistの式文字列の基礎を付けます このページ - 「/カタログ/CD [1]カタログの最初のCDチャイルドを選択します」

役に立ちましたか?

解決 2

Xpathexpressionを評価するためのヒントは正しいものでした。さまざまな表現を見つけることができます ここ. 。このクエリを使用して解決された問題:

    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