1

次の xml の名前空間 v1 をhttp://choby.co.xx/DialogueServices/AM/V1からhttp ://choby.co.xx/XYZ/WM/V1 に置き換えたいと考えています。

Input
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:v1="http://choby.co.xx/DialogueServices/AM/V1">
<soapenv:Header/>
<soapenv:Body>
  <v1:CancelAppointmentRequest>
     <Loc>1</Loc>
  </v1:CancelAppointmentRequest>
</soapenv:Body>
</soapenv:Envelope>

Expected:
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:v1="http://choby.co.xx/XYZ/WM/V1">
<soapenv:Header/>
<soapenv:Body>
  <v1:CancelAppointmentRequest>
     <Loc>1</Loc>
  </v1:CancelAppointmentRequest>
</soapenv:Body>
</soapenv:Envelope>

使用される xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://choby.co.xx/XYZ/WM/V1"
xmlns:ns1old="http://choby.co.xx/DialogueServices/AM/V1">
<xsl:output omit-xml-declaration="no" />
<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
</xsl:template>

<xsl:template match="/*">
    <xsl:element name="soapenv:{local-name()}"   namespace="http://www.w3.org/2003/05/soap-envelope">
        <xsl:apply-templates select="node()|@*" />
    </xsl:element>
</xsl:template>

<xsl:template match="ns1old:*">  
<xsl:element name="ns1:{local-name()}">
  <xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

Result:
<?xml version="1.0"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
 <soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/>
 <soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <ns1:CancelAppointmentRequest xmlns:ns1="http://choby.co.xx/XYZ/WM/V1">
 <Loc>1</Loc>
 </ns1:CancelAppointmentRequest>
 </soapenv:Body>
 </soapenv:Envelope>

Header および Body 名前空間は Envelope とは異なります

4

1 に答える 1

0

これを試してみてはどうですか:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://choby.co.xx/XYZ/WM/V1"
xmlns:ns1old="http://choby.co.xx/DialogueServices/AM/V1">

<xsl:output omit-xml-declaration="no" />

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

<xsl:template match="*[namespace-uri()='http://choby.co.xx/DialogueServices/AM/V1']">
    <xsl:element name="{local-name()}" namespace="http://choby.co.xx/XYZ/WM/V1">
        <xsl:apply-templates select="node()|@*" />
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

スタイルシートは、namespace を持つ要素を除いて、すべてを変更せずにコピーしますhttp://choby.co.xx/DialogueServices/AM/V1。このような要素が変更されます。

于 2013-08-10T13:35:14.097 に答える