我有以下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中的错误。
答案 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更加便携。