我需要在我的xslt中使用它,但是xmlns:s =" {$ service-uri}"没有提取:
<xsl:variable name="service-uri" select="'http://something/'"/> ... <xsl:template match="cxf:cxfEndpoint[last()]"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> <cxf:cxfEndpoint xmlns:s="{$service-uri}" endpointName="s:{$service-name}Port" id="{$service-name}_RemoteEndpoint" serviceName="s:{$service-name}" wsdlURL="wsdl/remote/{$service-name}.wsdl"> <cxf:properties> <entry key="continuationTimeout" value="120000"/> <entry key="mtom-enabled" value="true"/> <entry key="dataFormat" value="PAYLOAD"/> </cxf:properties> </cxf:cxfEndpoint> </xsl:template>
如何在命名空间定义中提取service-uri变量? 谢谢 ZAMEK
答案 0 :(得分:1)
属性值模板不能用于名称空间声明。请记住,XSLT是XML,XML解析器和XSLT处理器必须理解命名空间声明xmlns:x="..."
。
在XSLT 2.0中,您可以使用xsl:namespace
指令动态创建命名空间节点:
<xsl:namespace name="s" select="$service-uri"/>
如果你在1.0中,那就更难了。您可以通过在相关命名空间中创建元素节点来实现:
<xsl:variable name="dummy">
<xsl:element name="s:dummy" namespace="{$service-uri}"/>
</xsl:variable>
然后将相关的命名空间节点复制到新元素:
<xsl:copy-of select="exslt:node-set($dummy/*/namespace::s)"/>