2011-08-07 5 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>