объединение неповторяющегося элемента с повторяющимся элементом с помощью XSLT

У меня есть приведенный ниже образец исходных XML-данных. теперь мне нужно получить вывод таким образом, чтобы каждый серийный номер был напечатан со своим значением productNo, соединенным символом вертикальной черты с помощью XSLT.

<orders>
    <orderItems>
        <productNo>500656-B21</productNo>
        <serialNumber>KRW13707EV</serialNumber>
        <serialNumber>PR9137RFRV</serialNumber>
        <serialNumber>PR9137RFRW</serialNumber>
        <serialNumber>PR9137RFRX</serialNumber>
    </orderItems>
   <orderItems>
        <productNo>500686-B21</productNo>
        <serialNumber>KRW13807EZ</serialNumber>
        <serialNumber>PR9138RFRD</serialNumber>
        <serialNumber>PR9138RFRY</serialNumber>
        <serialNumber>PR9138RF51</serialNumber>
    </orderItems>
   <orderItems>
        <productNo>500693-B26</productNo>
        <serialNumber>KRW139075V</serialNumber>
        <serialNumber>PR9139RFXV</serialNumber>
        <serialNumber>PR9139RFW7</serialNumber>
        <serialNumber>PR9139RFZ5</serialNumber>
    </orderItems>
</orders>

Ожидаемый результат:

<orders>
<serialNo>500656-B21|KRW13707EV</serialNo>
<serialNo>500656-B21|PR9137RFRV</serialNo>
<serialNo>500656-B21|PR9137RFRW</serialNo>
<serialNo>500656-B21|PR9137RFRX</serialNo>
<serialNo>500686-B21|KRW13807EZ</serialNo>
<serialNo>500686-B21|PR9138RFRD</serialNo>
<serialNo>500686-B21|PR9138RFRY</serialNo>
<serialNo>500686-B21|PR9138RF51</serialNo>
<serialNo>500693-B26|KRW139075V</serialNo>
<serialNo>500693-B26|PR9139RFXV</serialNo>
<serialNo>500693-B26|PR9139RFW7</serialNo>
<serialNo>500693-B26|PR9139RFZ5</serialNo>
</orders>

Спасибо за вашу помощь.


person user1658369    schedule 01.12.2012    source источник


Ответы (1)


<xsl:template match="orders">
   <xsl:copy>
     <xsl:apply-templates select="orderItems/serialNumber"/>
   </xsl:copy>
</xsl:template>

<xsl:template match="serialNumber">
  <serialNo>
    <xsl:value-of select="concat(../productNo, '|', .)"/>
  </serialNo>
</xsl:template>

<xsl:output indent="yes"/>

должно хватить.

person Martin Honnen    schedule 01.12.2012