0

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

有人可以告诉我如何完成将参数传递到 XSLT 中吗?

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

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

公斤

我当前的代码

<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> 
4

1 回答 1

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 转换时使用的类。

于 2012-08-30T07:26:34.723 回答