XSLT - 拆分节点和组项目
XSLT - Split node and group items
我是 XSLT 的新手,正在挑战以下要求:
来源:
<item>
<name>123-foo</name>
<value>xxx</value>
</item>
<item>
<name>123-bar</name>
<value>yyy</value>
</item>
<item>
<name>456-foo</name>
<value>zzz</value>
</item>
<item>
<name>456-bar</name>
<value>aaa</value>
</item>
结果应该是这样的:
<item>
<key>123</key>
<control>foo</control>
<value>xxx</value>
</item>
<item>
<key>123</key>
<control>bar</control>
<value>yyy</value>
</item>
<item>
<key>456</key>
<control>foo</control>
<value>zzz</value>
</item>
<item>
<key>456</key>
<control>bar</control>
<value>aaa</value>
</item>
附加要求:应跳过列表的前两项。
在第二步中,这些项目应该按键分组。
<xsl:for-each-group select="*" group-by="key">
<!-- do something with each grouped item -->
</xsl:for-each-group>
我怎样才能做到这一点?我已经有一个名为 $data 的变量来获取每个源项的值。
示例:<xsl:value-of select="$data/123-foo"></xsl:value-of>
将输出“xxx”,但我不确定这是否有帮助。
使用group-by=“substring-before(., ‘-‘)”
您可以一步完成:
<xsl:for-each-group select="item" group-by="substring-before(name, '-')">
<group>
<xsl:for-each select="current-group()">
<item>
<key>
<xsl:value-of select="current-grouping-key()"/>
</key>
<control>
<xsl:value-of select="substring-after(name, '-')"/>
</control>
<xsl:copy-of select="value"/>
</item>
</xsl:for-each>
</group>
</xsl:for-each-group>
演示:https://xsltfiddle.liberty-development.net/gVAkJ5m
不确定你的意思:
The first two items of the list should be skipped.
我是 XSLT 的新手,正在挑战以下要求:
来源:
<item>
<name>123-foo</name>
<value>xxx</value>
</item>
<item>
<name>123-bar</name>
<value>yyy</value>
</item>
<item>
<name>456-foo</name>
<value>zzz</value>
</item>
<item>
<name>456-bar</name>
<value>aaa</value>
</item>
结果应该是这样的:
<item>
<key>123</key>
<control>foo</control>
<value>xxx</value>
</item>
<item>
<key>123</key>
<control>bar</control>
<value>yyy</value>
</item>
<item>
<key>456</key>
<control>foo</control>
<value>zzz</value>
</item>
<item>
<key>456</key>
<control>bar</control>
<value>aaa</value>
</item>
附加要求:应跳过列表的前两项。
在第二步中,这些项目应该按键分组。
<xsl:for-each-group select="*" group-by="key">
<!-- do something with each grouped item -->
</xsl:for-each-group>
我怎样才能做到这一点?我已经有一个名为 $data 的变量来获取每个源项的值。
示例:<xsl:value-of select="$data/123-foo"></xsl:value-of>
将输出“xxx”,但我不确定这是否有帮助。
使用group-by=“substring-before(., ‘-‘)”
您可以一步完成:
<xsl:for-each-group select="item" group-by="substring-before(name, '-')">
<group>
<xsl:for-each select="current-group()">
<item>
<key>
<xsl:value-of select="current-grouping-key()"/>
</key>
<control>
<xsl:value-of select="substring-after(name, '-')"/>
</control>
<xsl:copy-of select="value"/>
</item>
</xsl:for-each>
</group>
</xsl:for-each-group>
演示:https://xsltfiddle.liberty-development.net/gVAkJ5m
不确定你的意思:
The first two items of the list should be skipped.