通过调用模板进行xslt分组 [英] xslt grouping by calling template

查看:65
本文介绍了通过调用模板进行xslt分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是xslt的新手,他试图学习如何使用键和模板来学习分组.

I am new to xslt and trying to learn how to learn grouping using keys and using templates.

有人可以帮助我如何在xslt中执行以下操作吗? 我必须从另一个模板调用一个模板来进行转换.

Can somebody help me on how can do the following in xslt. I have to call a template from another template to do the transformation.

谢谢

这是我的xml.

<Doc>
<ExOrder>121</ExOrder>
<Line>
    <Ordernumber>225</Ordernumber>
    <OrderID>1</OrderID>
    <Quantity>5</Quantity>
</Line>
<Line>
    <Ordernumber>225</Ordernumber>
    <OrderID>5</OrderID>
    <Quantity>5</Quantity>
</Line>
<Line>
    <Ordernumber>226</Ordernumber>
    <OrderID>2</OrderID>
    <Quantity>5</Quantity>
</Line>

这是之后的样子.

<Doc>
    <Order>
        <Ordernumber>225</Ordernumber>
        <Line>
            <ID>1</ID>
            <ID>5</ID>
        </Line>
    </Order>
    <Order>
        <Ordernumber>225</Ordernumber>
        <Line>
            <ID>1</ID>
            <ID>5</ID>
        </Line>
    </Order>
</Doc>

推荐答案

我将假设您实际想要的输出是:

I'm going to assume the output you actually want is:

<Doc>
  <Order>
    <Ordernumber>225</Ordernumber>
    <Line>
      <ID>1</ID>
      <ID>5</ID>
    </Line>
  </Order>
  <Order>
    <Ordernumber>226</Ordernumber>
    <Line>
      <ID>2</ID>
    </Line>
  </Order>
</Doc>

由于您提供的示例输出没有意义.当在示例输入上运行时,此XSLT将产生上面的输出:

Since the sample output you provided makes no sense. This XSLT will produce the output above when run on your sample input:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:key name="kOrder" match="Line" use="Ordernumber"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="/*">
    <Doc>
      <xsl:apply-templates select="Line[generate-id() = 
                                        generate-id(key('kOrder', Ordernumber)[1])]" />
    </Doc>
  </xsl:template>

  <xsl:template match="Line">
    <Order>
      <xsl:apply-templates select="Ordernumber" />
      <Line>
        <xsl:apply-templates select="key('kOrder', Ordernumber)/OrderID" />
      </Line>
    </Order>
  </xsl:template>

  <xsl:template match="OrderID">
    <ID>
      <xsl:value-of select="."/>
    </ID>
  </xsl:template>
</xsl:stylesheet>

这篇关于通过调用模板进行xslt分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆