Я хочу объединить элементы позиции и создать новый элемент, называемый перемещением, после сравнения атрибута type. Первый тип = "from" должен сливаться с первым типом = "to", и должен продолжаться с остальными.Объединить элементы Xml на основе атрибута с использованием XSLT
ВХОД
<?xml version="1.0" encoding="UTF-8"?>
<JOB age="0" priority="N">
<container ID="TSTU2345678" TP="4200"/>
<container ID="TSTU3456789" TP="4200"/>
<position refID="Y.Test:AA.01.01.1" name="AA0101.1" type="from"/>
<position refID="Y.Test:AA.01.02.1" name="AA0102.1" type="from"/>
<position refID="Y.Test:AA.02.02.1" name="AA0202.1" type="to"/>
<position refID="Y.Test:AA.02.03.1" name="AA0203.1" type="to"/>
</JOB>
Требуемая мощность
<JOB age="0" priority="N">
<Travel FromrefID="Y.Test:AA.01.01.1" Fromname="AA0101.1" TorefID="Y.Test:AA.02.02.1" Toname="AA0202.1"/>
<Travel FromrefID="Y.Test:AA.01.02.1" Fromname="AA0102.1" TorefID="Y.Test:AA.02.03.1" Toname="AA0203.1"/>
</JOB>
То, что я пытался до сих пор. Он добавляет все типы To в элемент. Я не уверен, как выбрать первую и пометить ее как используемую. Также как изменить имена атрибутов. Пожалуйста помоги.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="position" match="job/position" use="@type" />
<xsl:template match="job">
<xsl:copy>
<xsl:apply-templates select="@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<JOB>
<xsl:apply-templates select="job/@*" />
<xsl:for-each select="key('position','from')">
<Travel>
<xsl:apply-templates select="@*" />
<xsl:for-each select="key('position','to')">
<To>
<xsl:apply-templates select="@*" />
</To>
</xsl:for-each>
</Travel>
</xsl:for-each>
</JOB>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Спасибо.