2013-08-08 6 views
0

Я пытаюсь написать функцию для моего XSL Transform.Вычисление значения из XPathNavigator

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

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

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

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

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

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

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

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

ответ

1

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

+0

Спасибо. Я искал функцию Evaluate, но я ее не нашел. Наверное, я просто слепой! Что будет делать оценка, если она встречает XPath, которая на самом деле является узлом? например «Some/Sub/Node» – DJL

+1

Тип возврата 'Evaluate' is' Object', в случае выбора узлов выбора XPath вы получите 'XPathNodeIterator', см. Http://msdn.microsoft.com/en-us /library/2c16b7x8.aspx. –

 Смежные вопросы

  • Нет связанных вопросов^_^