我想创建一个compilestring以将其与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()是我不太喜欢的东西的占位符。我将我的表达式String放在This Page上的示例列表中 - “/ catalog / cd [1]选择目录的第一个cd子”
答案 0 :(得分:0)
string myXPathString = "/"+ nav.LocalName + "["+ HOWDOIGETTHISNUMBER() +"]";
您希望构建和评估此XPath表达式:
"count(preceding-sibling::*[name()=''" + nav.LocalName +"]"
答案 1 :(得分:0)
评估XPathExpression的提示是正确的。可以找到各种表达式here。使用此查询解决了问题:
private string HOWDOIGETTHISNUMBER(XPathNavigator theNode)
{
XPathExpression query = theNode.Compile("count(preceding-sibling::"+theNode.LocalName+")+1");
return theNode.Evaluate(query).ToString();
}