XSLT Soap消息

时间:2017-02-07 19:51:44

标签: xslt soap

我无法更改SOAP响应中的标记名称。 我看到很多关于它的帖子,但我没有找到适用的解决方案。

我原来的XML是:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing">
   <soap:Header>
      <MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:4d6b87d8-fe14-4579-ac34-fe841c184a4b</MessageID>
      <RelatesTo RelationshipType="Reply" xmlns="http://www.w3.org/2005/08/addressing">uuid:1f9b0c7e-f36c-4fa3-ac2b-2377b57b6634</RelatesTo>
      <Action xmlns="http://www.w3.org/2005/08/addressing">http://xxx</Action>
   </soap:Header>
   <soap:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <OP1 xmlns="http://xxx/">
         <OPR>
            <OPO>
               <Cod>..</Cod>
               <A1>hi my...</A1>

            </OPO>
         </OPR>
      </OP1>
   </soap:Body>
</soap:Envelope>

我想为ANAME更改A1。

我的xsl是

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing">

   <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
   </xsl:template>

   <xsl:template match="A1">
        <ANAME><xsl:apply-templates /></ANAME>
   </xsl:template>      
</xsl:stylesheet>

谢谢!

1 个答案:

答案 0 :(得分:0)

只需将命名空间“http://xxx/”的命名空间声明添加到样式表元素中,如下所示:

xmlns:aaa="http://xxx/"

然后,您可以在模板中将A1元素与aaa:A1匹配:

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:aaa="http://xxx/">

   <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
   </xsl:template>

   <xsl:template match="aaa:A1">
     <xsl:element name="ANAME" namespace="http://xxx/">
       <xsl:apply-templates />
     </xsl:element>
   </xsl:template>     

</xsl:stylesheet>

部分输出:

...
<soap:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <OP1 xmlns="http://xxx/">
        <OPR>
            <OPO>
                <Cod>..</Cod>
                <ANAME>hi my...</ANAME>

            </OPO>
        </OPR>
    </OP1>
</soap:Body>