我需要转换代码的这一部分:
<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.asp和http://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>
这是我对声明性语言的第一次尝试,即使代码没有被回答,我也会感谢任何指导
答案 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>