如何匹配所有元素并按原始顺序打印它们

时间:2011-08-22 05:19:54

标签: xslt

我有一个我正在接收的xml文件,我想使用xsl格式化它。但是要求是 抓住元素并按照我收到xml文件的顺序打印出来。 查看下面的示例,第一个特殊元素有一个order元素,然后下一个没有一个,第三个有一个。 所以我想要那样的输出。 谢谢你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 :(得分:0)

您可以使用此模板:

<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