我需要从xsl文件调用另一个文件,它接收一些参数并返回一个必须添加的标记,如输出中所示,我必须从输入消息中获取参数
输入
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://ejemplo.com/servicios">
<soapenv:Header/>
<soapenv:Body>
<ser:Consultar>
<headerIn>
<dispositivo>01010101010101010101010101010101</dispositivo>
<medio>010001</medio>
<aplicacion>00006</aplicacion>
</headerIn>
<bodyIn>
<field1>1790197948001</field1>
<field2>0003</field12>
</bodyIn>
</ser:Consultar>
</soapenv:Body>
</soapenv:Envelope>
我需要这个输出
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://ejemplo.com/servicios">
<soapenv:Header/>
<soapenv:Body>
<ser:Consultar>
<headerIn>
<dispositivo>01010101010101010101010101010101</dispositivo>
<medio>010001</medio>
<aplicacion>00006</aplicacion>
<poli>
<teller>1</teller>
<terminal>3</terminal>
</poli>
</headerIn>
<bodyIn>
<field1>1790197948001</field1>
<field2>0003</field12>
</bodyIn>
</ser:Consultar>
</soapenv:Body>
</soapenv:Envelope>
我正在尝试使用此xsl代码
<xsl:stylesheet version="1.0" extension-element-prefixes="dp" exclude-result-prefixes="dp" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.example.org/tns" xmlns:dp="http://www.datapower.com/extensions">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="headerIn">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<!-- here i need call another xsl file, I want send 2 parameters taked from input, and to recibe tag poli -->
<xsl:call-template name="prueba-call-template">
<xsl:with-param name="param1" select="medio"/>
<xsl:with-param name="param2" select="aplicacion"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
prueba的呼叫template.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:dp="http://www.datapower.com/extensions"
xmlns:ser="http://ejemplo.com/servicios">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="teller"/>
<xsl:param name="terminal"/>
<xsl:template match="/*">
<xsl:variable name="result">
<poli>
<teller><xsl:value-of select="$teller"/></teller>
<terminal><xsl:value-of select="$terminal"/></terminal>
</poli>
</xsl:variable>
</xsl:template>
<poli> <xsl:value-of select="$result"/></poli>
</xsl:stylesheet>
答案 0 :(得分:0)
您无法按照自己的想法调用另一个XSLT文件。但是,您可以在其他文件中包含XSLT文件,然后调用包含XSLT的模板。
首先,将prueba-call-template.xsl更改为此...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:dp="http://www.datapower.com/extensions"
xmlns:ser="http://ejemplo.com/servicios"
exclude-result-prefixes="dp">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template name="prueba">
<xsl:param name="teller"/>
<xsl:param name="terminal"/>
<poli>
<teller><xsl:value-of select="$teller"/></teller>
<terminal><xsl:value-of select="$terminal"/></terminal>
</poli>
</xsl:template>
</xsl:stylesheet>
然后,您可以使用xsl:include
语句将此XSLT包含在主XSLT中
<xsl:include href="prueba-call-template.xsl" />
您还需要更改xsl:call-template
以使用正确的模板和参数名称(在当前的XSLT中,您使用参数调用它&#34; param1&#34;和&#34; param2&#34 ;但是你的第二个XSLT使用&#34; teller&#34;和&#34;终端&#34;)
<xsl:call-template name="prueba">
<xsl:with-param name="teller" select="medio"/>
<xsl:with-param name="terminal" select="aplicacion"/>
</xsl:call-template>
因此,您的主XSLT将如下所示:
<xsl:stylesheet version="1.0" extension-element-prefixes="dp" exclude-result-prefixes="dp" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.example.org/tns" xmlns:dp="http://www.datapower.com/extensions">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:include href="prueba-call-template.xsl" />
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="headerIn">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:call-template name="prueba">
<xsl:with-param name="teller" select="medio"/>
<xsl:with-param name="terminal" select="aplicacion"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意,两个XSLT都必须保存在同一位置。