У меня есть 2 XML-файлы, как показано ниже:Объединить 2 XML-файлы с помощью XSLT в UNIX
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>
Я используя XSLT для получения следующего выхода:
<?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>
Но получить это как выход:
<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>
Я не могу получить, где я отстающих ....
Моя идея, основанная на поле Measurement
, я должен обновить атрибуты stopDate
в taskItem
, и day
, duration
, hour
, interval
, minutes
в period
бирка.
Мой файл XSLT является
<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>
Я уверен, выполнение команды в UNIX следующим образом:
xsltproc xs.xslt file2.xml
спасибо за ответ, но выход, который я получил, не имел заголовка .... как я могу включить .... этот напрямую с помощью XSLT .... Xml version = "1.0" encoding = "UTF-8" standalone = "no"?> –
Я думал, что вы не хотите декларации XML, потому что ваш XSLT явно опускает его, и я скопировал это. Если вы этого захотите, удалите атрибут 'omit-xml-declaration =" yes "' из инструкции 'xsl: output' (или измените его значение на" yes "). –
этот только добавляет ' Xml version =" 1.0 "?>', Но если я хочу полный заголовок, ' Xml version =" 1.0 "encoding =" UTF-8 "standalone =" no "?>' , то что мне делать –