当用XSLT转换XML数据时,你可能想用参数来定制输出。想用vb做这件事的话,你可以用Microsoft XML Parser组件中的两个对象XSLTemplate和IXSLProcessor来实现。
XSLTemplate对象用于存储一个转换的副本。为在服务器环境下使用,该转换可以被暂时存储起来。一旦XSLTemplate读取了这个转换,你就可以用createProcessor函数创建一个IXSLProcessor。
把输入输出DOMDocuments设置为IXSLProcessor对象;然后你就可以用addParameter函数添加参数了。addParameter函数的参数是你要添加的那个参数的名称和参数值,还有命名空间是可选项。
在IXSLProcessor上调用转换函数将会执行转换过程,同时把你指定的参数传送过去。
XML
<?xml version="1.0"?>XSLT
<Employees Id="1"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<Employee Id="1">
<Name>John Smith</Name>
</Employee>
<Employee Id="2">
<Name>John Doe</Name>
</Employee>
</Employees>
<?xml version="1.0"?>vb
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:param name="EmpId"/>
<xsl:template match="/">
<EmployeeName>
<xsl:apply-templates select="//Employees/Employee[@Id=$EmpId]"/>
</EmployeeName>
</xsl:template>
<xsl:template match="Employee">
<xsl:value-of select="Name"/>
</xsl:template>
</xsl:stylesheet>
Dim domSource As DOMDocument Dim domTransform As FreeThreadedDOMDocument Dim domOutput As DOMDocument Dim objTemplate As XSLTemplate Dim objProcessor As IXSLProcessor Set domSource = New DOMDocument Set domTransform = New FreeThreadedDOMDocument Set domOutput = New DOMDocument Set objTemplate = New XSLTemplate Call domSource.Load(App.Path & " est.xml") Call domTransform.Load(App.Path & " est.xsl") Set objTemplate.stylesheet = domTransform Set objProcessor = objTemplate.createProcessor() objProcessor.input = domSource objProcessor.output = domOutput Call objProcessor.addParameter("EmpId", "1") Call objProcessor.Transform Call MsgBox(domOutput.xml)
在XSLT中使用参数使你可以再次使用相同的XSLT却得到不同的输出结果。通过vb实现这个功能意味着你的应用程序可以用XSLT来产生自定义的Web页,动态过滤XML文件,以及根据参数把XML转换为不同的格式。