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 进行转换时返回值测试。所以我应该得到值测试作为输出。

谁能弄清楚 XSLT 有什么问题。

4

1 回答 1

0

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

但是,可以扩展 XSLT 使其可以使用 javascript 函数,但这非常依赖于处理器,您应该将其视为与将 JavaScript 嵌入 HTML 中相同的方式。看看这个问题,作为一个例子

如何在 xslt 中包含 javaScript 文件

因此,在您的情况下,您的 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 更具可移植性。

于 2013-08-28T17:29:30.547 回答