как сопоставить все элементы и распечатать их в оригинальном порядке - PullRequest
1 голос
/ 22 августа 2011

У меня есть XML-файл, который я получаю, и я хочу отформатировать его с помощью xsl. Но требуется возьмите элементы и распечатайте их в том порядке, в котором я получил XML-файл. Глядя на образец ниже, первый специальный элемент получил элемент порядка, а затем следующий не имеет его, а третий - один. Так что я хочу вывод именно таким образом. Спасибо, я nAdvance

<main>
<submain>
<detail>
<specials>
<spec-qty>1</spec-qty>
<spec-desc>   Receivable </spec-desc>
</specials>
<order>
<text>Test</text>
</order>
<specials>
<spec-qty>-1</spec-qty>
<spec-desc>Receivable1 </spec-desc>
</specials>
<specials>
<spec-qty>-1</spec-qty>
<spec-desc>          Receivable2 </spec-desc>
</specials>
<order>
<text>Test2</text>
</order>
</detail>
</submain></main>

Вывод должен быть:

qty 1   Receivable order:Test qty -1   Receivable1 qty -1   Receivable2 order: Test2

Спасибо и извините за предыдущий незавершенный код

1 Ответ

0 голосов
/ 22 августа 2011

Вы можете использовать этот шаблон:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <xsl:apply-templates select="//detail/*[self::specials or self::order]"/>
    </xsl:template>

    <xsl:template match="specials">

        <xsl:value-of select="concat('qty ', spec-qty, '&#xA0;')"/>
        <xsl:value-of select="spec-desc"/>
        <xsl:text>&#xA0;</xsl:text>
    </xsl:template>

    <xsl:template match="order">
        <xsl:value-of select="concat('order:', text, '&#xA0;')"/>
    </xsl:template>

</xsl:stylesheet>

Выход:

qty 1    Receivable  order:Test qty -1 Receivable1  qty -1           Receivable2  order:Test2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...