我是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>
答案 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>
加上标准身份规则来复制其他元素。
请注意,这不会像在示例中那样将名称空间声明放在最外面的元素上,但结果将是等效的。
我建议您如何设置配置以应用此转换,因为我对您的处理环境知之甚少。