Reputation: 13
Please help to convert following xml to required format using xslt
each elements like clock In, Clock Out, Break Start, Break End needs to have TASDATA element as e separate parent
Actual XML:
<?xml version="1.0" encoding="UTF-8"?>
<tXML>
<Header>
<Source>TASSRC</Source>
<Action_Type>Create</Action_Type>
<Batch_ID>TASBTID</Batch_ID>
<Reference_ID>TASRFID</Reference_ID>
<User_ID>TASUSR</User_ID>
<Password>TASPWD</Password>
<Message_Type>TAS</Message_Type>
<Company_ID>810</Company_ID>
<Purpose_Code>TAS</Purpose_Code>
<Msg_Locale>en.US</Msg_Locale>
<Version>1.0</Version>
<Sequence_Number>TAS&</Sequence_Number>
</Header>
<Message>
<TimeAndAttendance>
<TASData>
<ClockIn>
<TranNumber>000000001</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<EmpClockIn>2012-08-06T05:04:00</EmpClockIn>
</ClockIn>
<BreakStart>
<TranNumber>000000002</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<BreakStartTime>2012-08-06T11:05:00</BreakStartTime>
<Activity>UNPAIDBRK</Activity>
</BreakStart>
<BreakEnd>
<TranNumber>000000003</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<BreakStartTime>2012-08-06T11:05:00</BreakStartTime>
<BreakEndTime>2012-08-06T11:31:00</BreakEndTime>
<Activity>UNPAIDBRK</Activity>
</BreakEnd>
<ClockOut>
<TranNumber>000000004</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<EmpClockOut>2012-08-06T15:29:00</EmpClockOut>
</ClockOut>
</TASData>
</TimeAndAttendance>
</Message>
</tXML>
Required XML:
<?xml version="1.0" encoding="UTF-8"?>
<tXML>
<Header>
<Source>TASSRC</Source>
<Action_Type>Create</Action_Type>
<Batch_ID>TASBTID</Batch_ID>
<Reference_ID>TASRFID</Reference_ID>
<User_ID>TASUSR</User_ID>
<Password>TASPWD</Password>
<Message_Type>TAS</Message_Type>
<Company_ID>810</Company_ID>
<Purpose_Code>TAS</Purpose_Code>
<Msg_Locale>en.US</Msg_Locale>
<Version>1.0</Version>
<Sequence_Number>TAS&</Sequence_Number>
</Header>
<Message>
<TimeAndAttendance>
<TASData>
<ClockIn>
<TranNumber>000000001</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<EmpClockIn>2012-08-06T05:04:00</EmpClockIn>
</ClockIn>
</TASData>
<TASData>
<BreakStart>
<TranNumber>000000002</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<BreakStartTime>2012-08-06T11:05:00</BreakStartTime>
<Activity>UNPAIDBRK</Activity>
</BreakStart>
</TASData>
<TASData>
<BreakEnd>
<TranNumber>000000003</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<BreakStartTime>2012-08-06T11:05:00</BreakStartTime>
<BreakEndTime>2012-08-06T11:31:00</BreakEndTime>
<Activity>UNPAIDBRK</Activity>
</BreakEnd>
</TASData>
<TASData>
<ClockOut>
<TranNumber>000000004</TranNumber>
<Warehouse>810</Warehouse>
<EmployeeUserId>173633</EmployeeUserId>
<EmpClockOut>2012-08-06T15:29:00</EmpClockOut>
</ClockOut>
</TASData>
</TimeAndAttendance>
</Message>
</tXML>
Upvotes: 1
Views: 138
Reputation: 107237
This should do the trick - it intercepts existing TimeAndAttendance/TASData
nodes and wraps each child in a new TASData
element:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="TimeAndAttendance/TASData">
<xsl:apply-templates select="*" mode="AddTASDataParent"/>
</xsl:template>
<xsl:template match="*" mode="AddTASDataParent">
<TASData>
<xsl:copy-of select="."/>
</TASData>
</xsl:template>
</xsl:stylesheet>
Upvotes: 1