Переместить определенный узел - PullRequest
0 голосов
/ 15 июня 2011

Я новичок в 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» в выборе блока копирования?(или я тут что-то не так делаю?)

1 Ответ

0 голосов
/ 15 июня 2011

Для копирования вашего клиента, не используйте значение, а копирование.

<xsl:template match="order">
    <xsl:copy>
        <xsl:copy-of select="customerid"/>
        <xsl:copy-of select="key('customerList', customerid)" />
    </xsl:copy>
</xsl:template>

Кстати, current () здесь не обязателен, так как order является контекстным узлом.

...