繁体   English   中英

我如何使用xslt将变量名称空间添加到元素

[英]how can i add a variable namespace to an element using xslt

我试图在soapenv:Header元素上设置一个命名空间,该命名空间根据传递给xslt的参数进行更改。

这是我正在使用的模板,预期的输出如下。

xslt的输入是3个参数,它们包含一个名称空间(该名称空间是变化的),请求方法和刚刚复制的消息正文。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
    <xsl:param name="RequestNameSpace" />
    <xsl:param name="RequestMethod"/>
    <xsl:param name="RequestMessageBody" />

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="/" >
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myns="{$RequestNameSpace}">
            <soapenv:Header/>
            <soapenv:Body>
                <xsl:element name="myns:{$RequestMethod}">
                    <xsl:copy-of select="$RequestMessageBody" />
                </xsl:element>
            </soapenv:Body>
        </soapenv:Envelope>

    </xsl:template>
</xsl:stylesheet>

当前输出,请注意soapenv:Envelope标记中未应用名称空间的情况,Im之后是传入RequestNameSpace时要应用的名称。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myns="{$RequestNameSpace}">
<soapenv:Header/>
<soapenv:Body>
    <myns:hello_world>
       <test_tag>Test output</test_tag>
    </myns:hello_world>
</soapenv:Body>
</soapenv:Envelope>

如果有人能指出我在做什么错,那就太好了。 我相信这与以下事实有关:我没有为soapenv:Envelop元素使用xsl:type元素,但是我不确定我如何声明它并包含名称空间。

干杯

为什么不使用:

<xsl:element name="{$RequestMethod}" namespace="{$RequestNameSpace}">
    <xsl:copy-of select="$RequestMessageBody" />
</xsl:element>

在XSLT 2.0中,使用xsl:namespace指令,例如<xsl:namespace name="prefix" select="$requiredNamespace"/>

如果您坚持使用XSLT 1.0,则可以使用<xsl:element name="x:dummy" namespace="{$requiredNamespace}"/>在所需的名称空间中创建一个虚拟元素(在变量中),然后,借助exslt:node-set()扩展和名称空间轴,您可以在此结果树片段中找到相关的名称空间节点,并使用<xsl:copy-of select="exslt:node-set($variable)//namespace::x)"/>东西将其复制到所需的元素中。 <xsl:copy-of select="exslt:node-set($variable)//namespace::x)"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM