2

我有一个像这样的 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 文件中获得订单:商店、标题文本、收银员。

有解决方案吗?

4

2 回答 2

4

添加一个与打印单匹配的模板,然后您可以定义子元素的调用顺序:

<xsl:template match="printedslip">
    <xsl:apply-templates select="store"/>
    <xsl:apply-templates select="headertext"/>
    <xsl:apply-templates select="cashier"/>
</xsl:template>

否则,订单取决于输入 XML(商店、收银员、标题文本)。XSLT 中模板的顺序不会影响打印单中元素的顺序。

通常,XSLT 处理器从上到下遍历输入 XML 中的所有元素——因此,如果您不想要该顺序——您需要告诉处理器(在 xslt 中)。

于 2012-08-23T08:37:48.960 回答
1

我想和xsl:apply-template你一起可以达到你的目标

于 2012-08-23T08:09:49.230 回答