2014-10-23 7 views
0

Предположим, у меня есть XML дерево, как это:msxsl: script language = "JScript" - фрагмент дерева процесса?

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <item> 
     <val>10,1</val> 
    </item> 
    <item> 
     <val>20,2</val> 
    </item> 
    <item> 
     <val>30,3</val> 
    </item> 
</root> 

Как я могу выбрать элементы дерева внутри msxsl: функцию сценария, который пишется на JScript? Как это:

<msxsl:script language="JScript" implements-prefix="baator"> 
<![CDATA[ 
    function test(N) { 
     //processing result tree fragment N here, for example i need to convert //item/val to numbers and return a complicate f(N) 
    } 
]]> 
</msxsl:script> 
... 
<xsl:value-of select="baator:test(//item)" /> 

В официальной документации есть примеры для C# языка, но ни для JScript. Я пытался использовать одинаковые имена классов без успеха. Важно использовать JScript, потому что в производственной среде есть функции, уже написанные на нем. Спасибо!

+0

Вы должны сказать нам, какие XSLT процессор, в котором окружающей среде используются и как MSXML в COM-мир как XslCompiledTransform в функциях расширения внутренней поддержки .NET в Java, но объектные модели и типы сопоставлений узла или фрагмента дерева совершенно разные. С образцом, который вы указали, аргумент на сайте XSLT/XPath с '// item' является набором узлов элементов item. Как это сопоставляется с классом или типом на сайте JScript, зависит от процессора XSLT, поэтому, пожалуйста, сообщите нам, какой из них вы используете. –

+0

Я создаю xslt/html шаблоны для сложной системы crm, разработанной сторонней компанией. Преобразование xslt выполняется на стороне сервера, которая написана на ASP.NET. Но я не могу точно сказать, какой XSLT-процессор используется (если в ASP.NET существует более одной реализации). – Kshatra

+0

Попробуйте запустить http://home.arcor.de/martin.honnen/xslt/processorTest2.xml в своем окружении, а затем сообщите нам, какой вывод вы получите, чтобы мы знали, какой XSLT-процессор вы используете. Если вы используете 'XslCompiledTransform', то сопоставление в http://msdn.microsoft.com/en-us/library/wxaw5z5e%28v=vs.110%29.aspx указывает, что набор узлов должен быть представлен как' XPathNodeIterator 'в коде .NET. Если это не сработает для вас, мы должны увидеть ваш код. –

ответ

1

Предполагая, что ваш XSLT-процессор представляет собой версию MSXML, такую ​​как MSXML 3 или MSXML 6, которая используется в Internet Explorer в качестве XSLT-процессора, API является API MSXML, зарегистрированным в http://msdn.microsoft.com/en-us/library/ms764730%28v=vs.85%29.aspx. Набор узлов, выбранное выражение XPath будет представлен как IXMLDOMSelection (см http://msdn.microsoft.com/en-us/library/ms757852%28v=vs.85%29.aspx), так что вы могли бы сценарий как

function test(nodes) { 
    var node; 
    var sum = 0; 
    while ((node = nodes.nextNode()) !== null) { 
    sum += parseFloat(node.selectSingleNode('val').text.replace(',', '.')); 
    } 
    return sum; 
} 

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

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