Вычисление значения из XPathNavigator

Я пытаюсь написать функцию для своего XSL-преобразования.

В основном внутри функции у меня есть System.Xml.XPath.XPathNodeIterator, и я хочу получить значение XPath при применении к каждому из узлов в этом итераторе.

В данном случае XPath равен concat(name(.) , "_", string(.)), но на самом деле это может быть что угодно.

Это вызывает исключение XPathException: «Выражение должно оцениваться как набор узлов». Какой смысл имеет смысл

Я подозреваю, что мне скажут, что это не действительный XPath, а некоторые другие функции, связанные с xml/xsl, однако учтите, что в XSL я могу сделать это:

<xsl:value-of select="concat(name(.) , "_", string(.))"/>

И это то, что мне нужно - но внутри функции.

Я использую С#, но ответы VB приемлемы.

System.Xml.XPath.XPathNodeIterator Nodes = whatever;
string KeySelector="concat(name(.), '_', string(.))";
while (Nodes.MoveNext())
{
    System.Xml.XPath.XPathNavigator xpnValue = Nodes.Current.SelectSingleNode(KeySelector);
}

person DJL    schedule 08.08.2013    source источник


Ответы (1)


Вам нужно будет использовать метод Evaluate, а не SelectSingleNode. И результатом вашего XPath является не XPathNavigator, это XPath String соответственно .NET System.String или C# string.

person Martin Honnen    schedule 08.08.2013
comment
Спасибо. Я искал функцию оценки, но не нашел ее. Наверное, я просто был слеп! Что сделает Evaluate, если встретит XPath, который на самом деле является набором узлов? например Некоторые/Подразделения/Узел - person DJL; 08.08.2013
comment
Тип возврата EvaluateObject, в случае выбора узлов выражением XPath вы получите XPathNodeIterator, см. msdn.microsoft.com/en-us/library/2c16b7x8.aspx. - person Martin Honnen; 08.08.2013