【问题标题】:How to get a value from a JavaScript in XSLT?如何从 XSLT 中的 JavaScript 获取值?
【发布时间】:2013-08-30 02:32:16
【问题描述】:

我有以下 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 中有什么问题吗?

【问题讨论】:

  • 您的value-of 缺少第二个方括号。应该是&lt;xsl:value-of select="CtrlList['$name1']"/&gt;
  • 对不起..这是一个拼写错误。但我仍然面临同样的问题。
  • AFAIK Xslt 无法原生解析 JSON 对象。请参阅此处了解一些想法:stackoverflow.com/questions/12188064/…

标签: html xslt xslt-1.0


【解决方案1】:

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

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

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 更具可移植性。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多