如何从XSLT中的JavaScript获取值?

时间:2013-08-27 11:13:40

标签: html xslt xslt-1.0

我有以下XML和XSLT转换为HTML。

XML

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <te>t1</te>
</root>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="html" indent="yes" />
   <xsl:template match="root">
      <html>
         <div>
            <xsl:variable name="name1" select="te" />
            **
            <xsl:value-of select="CtrlList['$name1']" />
            **
         </div>
         <script language="javascript">var List={
        "t1":"test"
    }</script>
      </html>
   </xsl:template>
</xsl:stylesheet>

所以我的目标是从XML获取“te”的值,并使用JavaScript对象“List”将其映射,并在使用XSLT进行转换时返回值test。所以我应该将值测试作为输出。

任何人都可以找出XSLT中的错误。

1 个答案:

答案 0 :(得分:0)

当你看到你的XSLT时,看起来似乎有JavaScript,但是所有XSLT都看到它输出了一个名为“script”的元素,其属性为“language”,其中包含一些文本。值得注意的是, xsl:value-of 用于从输入文档中获取值,但脚本元素实际上是结果树的一部分,因此无法访问 xsl:value-of

但是,可以扩展XSLT以便它可以使用javascript函数,但这非常依赖于处理器,您应该像在HTML中嵌入JavaScript一样考虑它。看看这个问题,作为一个例子

How to include javaScript file in xslt

因此,在您的情况下,您的XSLT将是这样的(请注意,此特定示例仅适用于Mircorsofts MSXML处理器)

<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"
      exclude-result-prefixes="msxsl user">

  <xsl:output method="xml" indent="yes" />

 <msxsl:script language="JScript" implements-prefix="user">
   var List={
    "t1":"test"
   }

   function lookup(key) {
     return List[key];
   }
 </msxsl:script>

<xsl:template match="root">  
  <html>
    <div> 
      <xsl:variable name="name1" select="te"/>   
      <xsl:value-of select="user:lookup(string($name1))"/>
    </div>
  </html>
</xsl:template>
</xsl:stylesheet>

当然,可能值得问一下为什么要在XSLT中使用javascript。使用纯XSLT可能会获得相同的结果,这肯定会让你的XSLT更加便携。