在XSLT转换中连接后组合元素

时间:2015-10-28 12:07:16

标签: xml xslt

我需要转换代码的这一部分:

                     <LineNumber>1</LineNumber>
                            <LineList>
                                <Line>
                                    <Numb>7103410047036</Numb>
                                    <Quantity>543</Quantity>
                                </Line>
                                <Line>
                                    <Numb>7103410047069</Numb>
                                    <Quantity>476</Quantity>
                                </Line>
                                <Line>
                                    <Numb>7103410047912</Numb>
                                    <Quantity>494</Quantity>
                                </Line>
                                <Line>
                                    <Numb>7103410047128</Numb>
                                    <Quantity>973</Quantity>
                                </Line>
                                <Line>
                                    <Numb>7103410047184</Numb>
                                    <Quantity>1209</Quantity>
                                </Line>
                            </LineList>

以XML格式加载此部分:

                            <LineNumber>1</LineNumber>
                            <Item>7103410047</Item>

即。切掉最后三位数 - 组合所有相同的Numb并插入转换后的XML中的一个Item元素。我是XSLT的新手 - 也就是我的第一次尝试 - 我已经阅读了位于此处的函数:http://www.w3schools.com/xsl/xsl_transformation.asphttp://www.xsltfunctions.com/xsl/fn_concat.html

我的XSLT:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="Item"> <!--here is where I am transforming-->
<xsl:copy>
<xsl:value-of select=
"concat(Sku)
"/>
</xsl:copy>
</xsl:template>
<xsl:template match="address/node()"/>
</xsl:stylesheet>

这是我对声明性语言的第一次尝试,即使代码没有被回答,我也会感谢任何指导

1 个答案:

答案 0 :(得分:0)

XSL 2.0

<xsl:template match="/">
    <xsl:for-each-group select="//Numb" group-by="substring(.,0,11)">
        <LineNumber><xsl:value-of select="preceding::LineNumber"/>
        </LineNumber>
        <Item>
            <xsl:value-of select="current-grouping-key()"/>
        </Item>
    </xsl:for-each-group>
</xsl:template>