I have 2 XML files as shown below:
File1.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Schedule name="myOffice">
<taskItem taskId="1" startDate="2013-01-01" stopDate="2037-12-31">
<measurements>
<measurement>USD</measurement>
</measurements>
<timings>
<period day="0" duration="0" hour="0" interval="28" minutes="0"/>
</timings>
</taskItem>
<taskItem taskId="2" startDate="2013-01-01" stopDate="2037-12-31">
<measurements>
<measurement>Rupee</measurement>
</measurements>
<timings>
<period day="0" duration="0" hour="0" interval="15" minutes="0"/>
</timings>
</taskItem>
</Schedule>
File2.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Schedule name="myOffice">
<taskItem taskId="1" startDate="2015-12-01" stopDate="2037-12-31">
<measurements>
<measurement>Rupee</measurement>
</measurements>
<timings>
<period day="5" duration="10" hour="0" interval="20" minutes="0"/>
</timings>
</taskItem>
</Schedule>
I am using XSLT to get the following output:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Schedule name="myOffice">
<taskItem taskId="1" startDate="2013-01-01" stopDate="2037-12-31">
<measurements>
<measurement>USD</measurement>
</measurements>
<timings>
<period day="0" duration="0" hour="0" interval="28" minutes="0"/>
</timings>
</taskItem>
<taskItem taskId="2" startDate="2013-01-01" stopDate="2037-12-31">
<measurements>
<measurement>Rupee</measurement>
</measurements>
<timings>
<period day="5" duration="10" hour="0" interval="20" minutes="0"/>
</timings>
</taskItem>
</Schedule>
But getting this as output:
<Schedule name="myOffice">
<taskItem taskId="1" startDate="2015-12-01" stopDate="2037-12-31">
<measurements>
<measurement>Rupee</measurement>
</measurements>
<timings>
<period day="5" duration="10" hour="0" interval="20" minutes="0"/>
</timings>
</taskItem>
</Schedule>
I am not able to get where I am lagging....
My idea is, based on field Measurement, I have to update attributes stopDate in taskItem, and day,duration,hour,interval,minutes in period tag.
My XSLT file is
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="taskItem//measurement">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<xsl:apply-templates
select="document('file1.xml')
/Schedule/taskItem/timings/period[@day = current()/../../timings/period/@day and
@duration = current()/../../timings/period/@duration and
@hour = current()/../../timings/period/@hour and
@interval = current()/../../timings/period/@interval and
@minutes = current()/../../timings/period/@minutes]/*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
I am executing the command in unix as follows:
xsltproc xs.xslt file2.xml