2011-08-22 49 views
1

我收到了一个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

您可以使用此模板:

<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 
+0

Thx基里尔我会试试看看它是如何去明天 – naijacoder