Xpathnavigatorを使用してXML子供のインデックスにアクセスするにはどうすればよいですか?
-
08-10-2019 - |
質問
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 +"]"
所属していません StackOverflow