名前空間URIの一部を別の文字列に置き換えようとすると、入力されたSOAPメッセージがあります。 URI全体を別のURIに置き換えることはできますが、既存のURIを変更することはできません。私は 'OLDSTRING'を探して 'NEWSTRING'と置き換える必要があります。私はSOAPメッセージでXSLTを使用してnamespace uriを置き換えます。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:schemas-NEWSTRING-com:transaction-data-1.69">
<soapenv:Header/>
<soapenv:Body>
<requestMessage xmlns="urn:schemas-NEWSTRING-com:VARIABLESTRING">
<merchantID>TESTID</merchantID>
</requestMessage>
</soapenv:Body>
</soapenv:Envelope>
:文字列VARIABLESTRINGは、すべての入力XMLにして変化するので、それが出力XMLであると私は維持する必要があります
入力XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:schemas-OLDSTRING-com:VARIABLESTRING">
<soapenv:Header/>
<soapenv:Body>
<requestMessage xmlns="urn:schemas-OLDSTRING-com:VARIABLESTRING">
<merchantID>TESTID</merchantID>
</requestMessage>
</soapenv:Body>
</soapenv:Envelope>
OUTPUTのXML次のXSLを試して名前空間URIを変更することができましたが、 'OLDSTRING'のみを 'NEWSTRING'に置き換え、残りの文字列をそのまま残したいと考えています。
XSLT:これは何をしたい
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|*|text()" />
</xsl:copy>
</xsl:template>
<xsl:template match="//*[namespace-uri()='urn:schemas-OLDSTRING-com:VARIABLESTRING']">
<xsl:element name="{local-name()}" namespace="urn:schemas-NEWSTRING-com:VARIABLESTRING" >
<xsl:apply-templates select="@*|*|text()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
ありがとう。たくさんのことが完璧に働いています – sarma