2017-04-24 20 views
0

こんにちは私は希望の出力を得るために入力XMLファイルをトラバースすることができません。親切に助けてください。 所望の出力:XSLT変換

<DocFWImport><Header senderID="ABC1234"/></Request></DocFWImport> 

私のXSLTファイル:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rout="http://safe.com/RoutePlanner/" xmlns:dp="http://www.datapower.com/extensions" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" extension-element-prefixes="dp" exclude-result-prefixes="dp"> 
    <xsl:output method="xml"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="/Envelope/Body/ABCCustomMsg/*"/> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

入力XML:

<Envelope 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rout="http://safe.com/RoutePlanner/"> 

<Body> 
<rout:ABCCustomMsg 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
> 

<DocFWImport><Header senderID="ABC1234"/></Request></DocFWImport></ns1:ABCCustomMsg> 
</Body> 
</Envelope> 
+2

あなたの入力も出力も整形式のXML文書ではありません。 –

答えて

0

は、あなたのXPathで名前空間接頭辞を使用する必要があります。それは彼らがしているものです:

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:rout="http://safe.com/RoutePlanner/" 
       xmlns:dp="http://www.datapower.com/extensions" 
       xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
       extension-element-prefixes="dp" exclude-result-prefixes="dp"> 
    <xsl:output method="xml"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="/soapenv:Envelope/soapenv:Body/rout:ABCCustomMsg/*"/> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

これは、出力を生成する必要があります

<DocFWImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rout="http://safe.com/RoutePlanner/"><Header senderID="ABC1234"/></Request></DocFWImport> 

あなたが実際に(あなたの例の出力は何の名前空間を持っていないよう)あなたがコピーしている要素から名前空間を削除する場合

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:rout="http://safe.com/RoutePlanner/" 
       xmlns:dp="http://www.datapower.com/extensions" 
       xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
       extension-element-prefixes="dp" exclude-result-prefixes="dp"> 
    <xsl:output method="xml"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="/soapenv:Envelope/soapenv:Body/rout:ABCCustomMsg/*"/> 
    </xsl:template> 

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

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

これは、表示された望ましい出力を生成するはずです。