【发布时间】:2016-05-30 11:06:18
【问题描述】:
我正在尝试将 soap 消息复制到自定义 xml(从 Envelope、Header、Body 中删除 soap 命名空间并从 ResponseHeader 元素中删除命名空间前缀,一切都很好,期望 ResponseHeader 和 ResponseData 元素中有一个 xmlns:soap 命名空间。
输入:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http:test/201/2"
xmlns:m0="http:test/201/3"
xmlns:ns0="http:test/201/4"
xmlns:ns2="http:test/201/5"
xmlns:ns1="http:test/201/6"
xmlns:ns3="http:test/201/7"
xmlns:ns6="http:test/201/8"
xmlns:ns4="http:test/201/9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<soap:Header>
<ns0:ResponseHeader>
<ns:Env>Dev</ns:Env>
<ns:Version>1</ns:Version>
<ns:Server>
<ns:Name>NAME</ns:Name>
</ns0:ResponseHeader>
</soap:Header>
<soap:Body>
<ns2:ResponseData>
<ns2:Employee />
<ns2:MessageList>
<ns2:Message>
<ns4:Type>new</ns4:Type>
<ns4:Code>1</ns4:Code>
<ns4:Source>contract</ns4:Source>
<ns4:Description>new hire</ns4:Description>
</ns2:Message>
</ns2:Employee>
</ns2:ResponseData>
</soap:Body>
</soap:Envelope>
预期输出:
<Envelope
xmlns:ns="http:test/201/2"
xmlns:m0="http:test/201/3"
xmlns:ns0="http:test/201/4"
xmlns:ns2="http:test/201/5"
xmlns:ns1="http:test/201/6"
xmlns:ns3="http:test/201/7"
xmlns:ns6="http:test/201/8"
xmlns:ns4="http:test/201/9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<Header>
<ResponseHeader>
<ns:Env>Dev</ns:Env>
<ns:Version>1</ns:Version>
<ns:Server>
<ns:Name>NAME</ns:Name>
</ResponseHeader>
</Header>
<Body>
<ns2:ResponseData>
<ns2:Employee />
<ns2:MessageList>
<ns2:Message>
<ns4:Type>new</ns4:Type>
<ns4:Code>1</ns4:Code>
<ns4:Source>contract</ns4:Source>
<ns4:Description>new hire</ns4:Description>
</ns2:Message>
</ns2:Employee>
</ns2:ResponseData>
</Body>
</Envelope>
我的 Xslt:
<xsl:stylesheet version="2.0" extension-element-prefixes="dp" exclude-result-prefixes="soap ns3 snss ns0 ns1 ns4 #default"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http:test/201/2"
xmlns:m0="http:test/201/3"
xmlns:ns0="http:test/201/4"
xmlns:ns2="http:test/201/5"
xmlns:ns1="http:test/201/6"
xmlns:ns3="http:test/201/7"
xmlns:ns6="http:test/201/8"
xmlns:ns4="http:test/201/9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<xsl:output method="xml" version="1.0" indent="no"/>
<xsl:template match="node()|@*" exclude-result-prefixes="#all">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="soap:*" exclude-result-prefixes="#all">
<xsl:element name="{local-name()}">
<xsl:copy-of select="namespace::*[not(. = namespace-uri(..))]"/>
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="tns:ResponseData" exclude-result-prefixes="#all">
<ResponseHeader>
<xsl:copy-of select="namespace::*[not(. = namespace-uri(..))]"/>
<xsl:apply-templates select="node()|@*"/>
</ResponseHeader>
</xsl:template>
</xsl:stylesheet>
获取输出:
<Envelope
xmlns:ns="http:test/201/2"
xmlns:m0="http:test/201/3"
xmlns:ns0="http:test/201/4"
xmlns:ns2="http:test/201/5"
xmlns:ns1="http:test/201/6"
xmlns:ns3="http:test/201/7"
xmlns:ns6="http:test/201/8"
xmlns:ns4="http:test/201/9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<Header>
<ResponseHeader xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<ns:Env>Dev</ns:Env>
<ns:Version>1</ns:Version>
<ns:Server>
<ns:Name>NAME</ns:Name>
</ResponseHeader>
</Header>
<Body>
<ns2:ResponseData xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<ns2:Employee />
<ns2:MessageList>
<ns2:Message>
<ns4:Type>new</ns4:Type>
<ns4:Code>1</ns4:Code>
<ns4:Source>contract</ns4:Source>
<ns4:Description>new hire</ns4:Description>
</ns2:Message>
</ns2:Employee>
</ns2:ResponseData>
</Body>
</Envelope>
请帮助如何摆脱 xmlns:soap 属性?
【问题讨论】:
-
请发布一个格式良好的输入和输出。