本文介绍了通过调用模板进行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="www.w3/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分组
发布评论