首页 文章

变量使用命名空间定义

提问于
浏览
0

我在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

1 回答

  • 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)"/>
    

相关问题