XSL文件向soap xml添加一个新标签

时间:2017-10-11 12:06:44

标签: java xml web-services xslt soap

我是XSLT的新手。 基本上,我需要通过添加一行以及其间的一些命名空间来更新传入的soap xml。你能建议XSL为我做这个吗? 另外一个问题,我应该在哪里放置XSL文件以对所有传入请求采取措施?

Incoming Requests:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <consultaRegistros>
         <id>231</id>
         <numero>1231</numero>
         <registros_alta>
            ......
         </registros_alta>
      </consultaRegistros>
   </soapenv:Body>
</soapenv:Envelope>


To be transformed to:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:les="LEServico">
   <soapenv:Header/>
   <soapenv:Body>
        <les:consultaRegistrosReq>
          <consultaRegistros>
             <id>231</id>
             <numero>1231</numero>
             <registros>
                ......
             </registros>
          </consultaRegistros>
        </les:consultaRegistrosReq>
   </soapenv:Body>
</soapenv:Envelope>

2 个答案:

答案 0 :(得分:0)

  

你能否建议XSL为我做这个?

不,这是一个相当独特的需求,并且没有预先存在的XSLT示例可以为您完成。您将需要学习基本的XSLT并自己制作。

  

还有一个问题,我应该在哪里放置XSL文件以对所有传入请求采取措施?

我强烈建议完全跳过XSLT,只需更改传入的SOAPMessage对象即可添加要添加的元素。

答案 1 :(得分:0)

你可以改变这个:

  <consultaRegistros>
     <id>231</id>
     <numero>1231</numero>
     <registros_alta>
        ......
     </registros_alta>
  </consultaRegistros>

到此:

    <les:consultaRegistrosReq xmlns:les="LEServico">
      <consultaRegistros>
         <id>231</id>
         <numero>1231</numero>
         <registros>
            ......
         </registros>
      </consultaRegistros>
    </les:consultaRegistrosReq>

使用模板规则:

<xsl:template match="consultaRegostros">
  <les:consultaRegistrosReq xmlns:les="LEServico">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </les:consultaRegistrosReq>
</xsl:template> 

<xsl:template match="registros_alta">
  <registros>
      <xsl:apply-templates/>
  </registros>
</xsl:template>  

加上标准身份规则来复制其他元素。

请注意,这不会像在示例中那样将名称空间声明放在最外面的元素上,但结果将是等效的。

我建议您如何设置配置以应用此转换,因为我对您的处理环境知之甚少。