Я новичок в xslt, и у меня сейчас нет идей.Надеюсь, что вы подскажете, можете помочь мне вернуться в нужное русло.
Учитывая следующий XML, который поставляется нам от третьей стороны:
<orderbatch>
<orders>
<order>
<id>1</id>
<customerid>2001</customerid>
<articleid>345</articleid>
</order>
</orders>
<customers>
<customer>
<id>2001</id>
<name>John Smith</name>
</customer>
</customers>
</orderbatch>
, если я хочу переместить соответствующий клиентский узел под заказузел через xslt, чтобы получить этот вывод:
<orderbatch>
<orders>
<order>
<id>1</id>
<customerid>2001</customerid>
<articleid>345</articleid>
<customer>
<id>2001</id>
<name>John Smith</name>
</customer>
</order>
</orders>
<customers>
<customer>
<id>2001</id>
<name>John Smith</name>
</customer>
</customers>
</orderbatch>
У меня есть рабочий xslt с фиксированным значением, но я немного затрудняюсь, как его параметризовать:
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:key name="customerList" match="/orderbatch/customers/customer" use="id"/>
<xsl:template match="order">
<xsl:copy>
<xsl:value-of select="id"/>
<customer>
<xsl:value-of select="key('customerList', '2001')"/>
</customer>
</xsl:copy>
</xsl:template>
По какой-то причине я не могу использовать xsl: variable, current () / customerid вместо '2001', поскольку в результате получается пустой узел в узле заказа (в то время как клиент присутствует в списке клиентов).Итак, вопрос в том, как мне параметризировать «2001» в выборе блока копирования?(или я тут что-то не так делаю?)