Reputation: 11
I am looking to transform XML1 to XML2 (bascially adding additional namespaces & ).
I have been told this can be done via XSLT. Is this achieveable using XSLT and how simple (or complex) is it?
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>
Upvotes: 1
Views: 362
Reputation: 167716
You can't have a DOCTYPE node inside of an element node. Other than that you can of course achieve the task with 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>
Upvotes: 1