2011-08-07 8 views
1

XML1をXML2に変換しようとしています(基本的に追加の名前空間を追加する& )。XMLメッセージのXSLT変換 - 初心者

これはXSLT経由で行うことができると言われています。これはXSLTを使用して達成可能ですか、どのようにシンプル(または複雑)ですか?

XML1

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE Update_WCS_OrderStatus SYSTEM "Update_WCS_OrderStatus_20.dtd" > 
<Update_WCS_OrderStatus> 
<ControlArea> 
     <Verb value="Constant">test</Verb> 
     <Noun value="Constant">Constant</Noun> 
     <Credentials> 
     <LogonId>a</LogonId> 
     <Password>b</Password> 
     </Credentials> 
    </ControlArea> 
    <DataArea> 
    <OrderStatus> 
     <OrderStatusHeader> 
      <OrderNumber/> 
       </OrderStatusHeader> 
       <OrderStatusItem> 
       <ItemNumber/> 
       </OrderStatusItem> 
      </OrderStatus> 
     </DataArea> 
</Update_WCS_OrderStatus>' 

XML2 
'<?xml version="1.0" encoding="UTF-8"?> 
<ns0:Messages xmlns:ns0="http://sap.com/xi/XI/SplitAndMerge"> 
    <ns0:Message1> 
    <!DOCTYPE Update_WCS_OrderStatus SYSTEM "Update_WCS_OrderStatus_20.dtd" > 
     <Update_WCS_OrderStatus> 
     <ControlArea> 
      <Verb value="">Constant</Verb> 
      <Noun value="">Constant</Noun> 
      <Credentials> 
       <LogonId>test</LogonId> 
       <Password>test</Password> 
      </Credentials> 
     </ControlArea> 
     <DataArea> 
      <OrderStatus> 
       <OrderStatusHeader> 
        <OrderNumber/> 
       </OrderStatusHeader> 
       <OrderStatusItem> 
        <ItemNumber/> 
       </OrderStatusItem> 
      </OrderStatus> 
     </DataArea> 
     </Update_WCS_OrderStatus> 
    </ns0:Message1> 
</ns0:Messages> 

答えて

1

あなたは要素ノードの内部DOCTYPEノードを持つことはできません。 もちろん、XSLTを使用してこのタスクを達成できます。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
    xmlns:ns0="http://sap.com/xi/XI/SplitAndMerge"> 

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

<xsl:template match="/"> 
    <ns0:Messages> 
    <ns0:Message1> 
     <xsl:apply-templates/> 
    </ns0:Message1> 
    </ns0:Messages> 
</xsl:template> 

<xsl:template match="ControlArea/Verb[@value = 'Constant'] | ControlArea/Noun[@value = 'Constant']"> 
    <Verb value="">Constant</Verb> 
</xsl:template> 

</xsl:stylesheet>