XSLT 2.0将平面XML数据转换为heirarchical的性能?

时间:2016-06-15 13:59:56

标签: xslt-2.0

我的数据如下:

<Root>
    <Node>
        <Region>Central</Region>
        <Provider>A</Provider>
        <Value>100</Value>
    </Node>
    <Node>
        <Region>Central</Region>
        <Provider>B</Provider>
        <Value>200</Value>
    </Node
    <Node>
        <Region>Central</Region>
        <Provider>B</Provider>
        <Value>250</Value>
    </Node>
    <Node>
        <Region>Eastern</Region>
        <Provider>C</Provider>
        <Value>50</Value>
    </Node>
</Root>

试图改造为:

<Root>
   <Region>
       <Name>Central</Name>
       <Provider>
           <Name>A</Name>
           <Item>
              <Value>100</Value>
           </Item>
       </Provider>
       <Provider>
           <Name>B</Name>
           <Item>
              <Value>200</Value>
           </Item>
           <Item>
              <Value>250</Value>
           </Item>
       </Provider>
    </Region>
    <Region>
        <Name>Eastern</Name>
        <Provider>
            <Name>C</Name>
            <Item>
                <Value>50</Value>
            </Item>
        </Provider>
    </Region>
</Root>

过去我使用过Muenchian Method,但是我试图使用XSLT 2.0构造xsl:for-each-group来完成同样的事情,但目前还没有成功。

是否可以使用xsl:for-each-group来完成上述操作?怎么样?

修改

这是我到目前为止所做的工作。但是,我不确定效率 - 特别是使用这样的结构强制解析器读取整个文档并对其进行排序?进来的数据已经按照我想要的方式排序。

<xsl:template match="Root">
    <xsl:element name="Root">
        <xsl:for-each-group select="Node" group-by="Region">
            <xsl:element name="Region">
                <xsl:element name="Name">
                   <xsl:value-of select="Region" />
                </xsl:element>
                <xsl:for-each-group select="current-group()" group-by="Provider">
                    <xsl:element name="Provider">
                        <xsl:for-each select="current-group()">
                           <xsl:element name="Item">
                             <xsl:value-of select="Value" />
                           </xsl:element>
                        </xsl:for-each>
                    </xsl:element>
                </xsl:for-each-group>                       
            </xsl:element>
        </xsl:for-each-group>

    </xsl:element>

</xsl:template>

0 个答案:

没有答案