我的服务器端转换不会将参数传递给XSL

时间:2012-08-29 20:26:03

标签: asp.net xml xslt asp-classic

非常基本的开发人员。我目前使用mappath在服务器端转换我的XSL和XML。这很有名,但只使用这个BC,这是W3C学校网站上使用的例子。我试图通过URL字符串传递参数来扩展我的页面的一些功能。您可能已经知道我无法使用mappath方法传递URL参数。我不知道我的生活如何以任何其他方式做到这一点。谷歌没有提供明确的例子也没有提供我的wrox书籍。

有人可以请教我如何将参数传递到XSLT中吗?

我想我要么需要使用新方法进行服务器端转换,要么我需要了解传递参数的新方法。

感谢你过去的所有帮助,这对我的项目产生了巨大的影响!

KG

我当前的代码

<html><title>Report</title>
<head>
</head>
<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("/XML/XMLData/View.xml"))

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("Data.xsl"))
'Transform file
Response.Write(xml.transformNode(xsl))
%>
</html> 

1 个答案:

答案 0 :(得分:0)

暂时只是迂腐,这里不是映射路径。所有Server.MapPath都会将相对或虚拟路径(在您的情况下为“/XML/XMLData/View.xml”)转换为服务器上的物理目录,然后由XML处理器加载。在您的情况下,您使用ASP,因此处理器是MSXML。

幸运的是,你确实支持传递参数,尽管你需要做一些额外的工作。请尝试使用此代码示例

<html><title>Report</title> 
<head> 
</head> 
<% 
' Load XML
set xmldoc = Server.CreateObject("Msxml2.DOMDocument")
xmldoc.async = false
xmldoc.load(Server.MapPath("/XML/XMLData/View.xml"))

' Load XSLT (as XML)
Set xsldoc = Server.CreateObject("Msxml2.FreeThreadedDOMDocument")
xsldoc.async = false
xsldoc.load(Server.MapPath("Data.xslt"))

' Set up stylesheet
set xslt = Server.CreateObject("Msxml2.XSLTemplate")
xslt.stylesheet = xsldoc

' Create a processor to do the transform
Set xslproc = xslt.createProcessor()
xslproc.input = xmldoc
xslproc.addParameter "myParam", "Hello World"
xslproc.transform()

Response.Write xslproc.output
%> 
</html> 

在XSLT本身中,您显然需要指定参数。这是通过使用 xsl:param 元素完成的。这需要在 xsl:stylesheet 元素内,靠近顶部,以及您拥有的 xsl:template 元素之外

<xsl:param name="myParam" select="'Good Morning'" />

请注意,在这种情况下, select 属性指定一个默认值,如果参数不是由调用代码设置的。

我注意到你也标记了 asp.net 这个问题,在这种情况下你可能想要了解一下XSLTCompliled转换,这是你在.Net中进行XSLT转换时使用的类。 / p>