2012-09-10 128 views
0

輸入:XML的分組節點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> 

如何分組基於根/參考做,並添加序列號,RefNumber在xslt 1.0中輸出?

由於提前做這個

+0

嗨..它是分組的序列號,比如參考= 100它是1,2,3 [即100的出現次數] –

回答

3

的方法之一是使用XSL :數。每當你匹配參考元素,複製元素,並與參考元素具有相同值的數量增加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> 

請注意使用身份轉換模板來複制其他現有節點。

+0

非常感謝:) –