[英]Grouping of xml nodes in xslt 1.0
輸入:
輸入XML
<Root>
<Number>1</Number>
<Reference>100</Reference>
<Number>2</Number>
<Reference>101</Reference>
<Number>3</Number>
<Reference>100</Reference>
<Number>4</Number>
<Reference>102</Reference>
<Number>5</Number>
<Reference>100</Reference>
</Root>
預期產量:
<Root>
<Number>1</Number>
<Reference>100</Reference>
<RefNumber>1</RefNumber>
<Number>2</Number>
<Reference>101</Reference>
<RefNumber>1</RefNumber>
<Number>3</Number>
<Reference>100</Reference>
<RefNumber>2</RefNumber>
<Number>4</Number>
<Reference>102</Reference>
<RefNumber>1</RefNumber>
<Number>5</Number>
<Reference>100</Reference>
<RefNumber>3</RefNumber>
</Root>
如何在xslt 1.0的輸出中基於根/引用進行分組並向RefNumber添加順序號?
提前致謝
一種方法是使用xsl:number 。 只要與Reference元素匹配,就復制該元素,並添加RefNumber元素,其中RefNumber元素的數量應具有相同的值:
<xsl:template match="Reference">
<xsl:copy-of select="." />
<xsl:variable name="Ref" select="." />
<RefNumber><xsl:number count="Reference[. = $Ref]" /></RefNumber>
</xsl:template>
這是完整的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Reference">
<xsl:copy-of select="." />
<xsl:variable name="Ref" select="." />
<RefNumber><xsl:number count="Reference[. = $Ref]" /></RefNumber>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
當應用於示例XML時,將輸出以下內容:
<Root>
<Number>1</Number>
<Reference>100</Reference>
<RefNumber>1</RefNumber>
<Number>2</Number>
<Reference>101</Reference>
<RefNumber>1</RefNumber>
<Number>3</Number>
<Reference>100</Reference>
<RefNumber>2</RefNumber>
<Number>4</Number>
<Reference>102</Reference>
<RefNumber>1</RefNumber>
<Number>5</Number>
<Reference>100</Reference>
<RefNumber>3</RefNumber>
</Root>
請注意使用身份轉換模板來復制其他現有節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.