вызов функции с помощью xslt с использованием выбора xpath - PullRequest
2 голосов
/ 18 сентября 2011

Как я могу вызвать функцию javascript / c # в xslt, передав значение выбора xpath. Вот как я вызываю функцию с типизированным вручную параметром:

<xsl:value-of select="cs:my('some text')"/>

1 Ответ

1 голос
/ 18 сентября 2011

Вот пример из MSXML 4 SDK (это должно быть то же самое для MSXML 6 и очень похоже на .NEt's XslCompiledTransform - для последнего поиск в MSDN для <msxsl:script>)

Пример В этом примере определяется блок скрипта с префиксом пространства имен пользователя, который содержит функцию с именем xmlкоторый принимает список узлов в качестве аргумента.Позже эта функция, xml (нодлист) в пространстве имен пользователя, вызывается из атрибута select.

XML-файл (Customers.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
   <customer>
      <name>John Smith</name>
      <address>123 Elm St.</address>
      <phone>(123) 456-7890</phone>
   </customer>
   <customer>
      <name>Mary Jones</name>
      <address>456 Oak Ave.</address>
      <phone>(156) 789-0123</phone>
   </customer>
</customers>

XSLT-файл (script.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="http://mycompany.com/mynamespace">

<msxsl:script language="JScript" implements-prefix="user">
   function xml(nodelist) {
      return nodelist.nextNode().xml;
   }
</msxsl:script>

<xsl:template match="/">
   <xsl:value-of select="user:xml(.)"/>
</xsl:template>

</xsl:stylesheet>

Форматированный вывод

<?xml version="1.0" encoding="UTF-16"?>&lt;?xml version="1.0"?&gt;
&lt;?xml-stylesheet type="text/xsl" href="script.xsl" ?&gt;
&lt;customers&gt;
 &lt;customer&gt;
  &lt;name&gt;John Smith&lt;/name&gt;
  &lt;address&gt;123 Elm St.&lt;/address&gt;
  &lt;phone&gt;(123) 456-7890&lt;/phone&gt;
 &lt;/customer&gt;
 &lt;customer&gt;
  &lt;name&gt;Mary Jones&lt;/name&gt;
  &lt;address&gt;456 Oak Ave.&lt;/address&gt;
  &lt;phone&gt;(156) 789-0123&lt;/phone&gt;
 &lt;/customer&gt;
&lt;/customers&gt;
...