我有一个像这样的xml文件:receipt.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xml" href="receipt.xslt"?>
<printedslip>
<pos>
<posno>11546546</posno>
</pos>
<store>
<storeno>1</storeno>
<storename>Store 01</storename>
<orgno>001</orgno>
<postalcode>550</postalcode>
</store>
<cashier>
<userno>1</userno>
<name>Sara</name>
</cashier>
<headertext>Receipt Profile Header</headertext>
</printedslip>
和xslt文件:receipt.xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="params.xslt"/>
<xsl:include href="store.xslt"/>
<xsl:include href="headergroup.xslt"/>
<xsl:output method="text" />
<xsl:strip-space elements="*"/>
<xsl:template match="store">
<xsl:call-template name="store">
<xsl:with-param name="value" select="store"/>
<xsl:with-param name="store_no" select="$store_no"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="headertext">
<xsl:call-template name="receiptheader">
<xsl:with-param name="value" select="headertext"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="cashier">
<xsl:call-template name="cashier">
<xsl:with-param name="value" select="cashier"/>
<xsl:with-param name="cashier" select="$cashier"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
我希望收到输出文本,该文本按照在XSLT文件中添加模板的顺序形成。相反,我按照节点出现在XML文件中的顺序首先收到商店信息,收银员和标题文本。我想从XSLT文件获得订单:store,header text,cashier。
有解决方法吗?
答案 0 :(得分:4)
添加与printslip匹配的模板,然后您可以定义应该调用子元素的顺序:
<xsl:template match="printedslip">
<xsl:apply-templates select="store"/>
<xsl:apply-templates select="headertext"/>
<xsl:apply-templates select="cashier"/>
</xsl:template>
否则订单取决于输入XML(商店,收银员,headertext)。 XSLT中模板的顺序不会影响printslip中元素的顺序。
通常,XSLT处理器从上到下运行输入XML中的所有元素 - 所以如果你不想要那个顺序 - 你需要告诉处理器(在xslt中)。
答案 1 :(得分:1)
我认为xsl:apply-template
可以达到目标