通过Xsl中的子项的值来分组xml节点
发布时间:2020-12-16 07:53:19 所属栏目:百科 来源:网络整理
导读:rootelementid1/idgroupfirst/group/elementelementid2/idgroupsecond/group/elementelementid3/idgroupfirst/group/element...root 我如何按xslt 1.0中的组名分组我的元素. 输出: rootgroup name="first" element id1/id groupfirst/group /element elemen
<root> <element> <id>1</id> <group>first</group> </element> <element> <id>2</id> <group>second</group> </element> <element> <id>3</id> <group>first</group> </element> ... <root> 我如何按xslt 1.0中的组名分组我的元素. <root> <group name="first"> <element> <id>1</id> <group>first</group> </element> <element> <id>3</id> <group>first</group> </element> </group> <group name="second"> <element> <id>2</id> <group>second</group> </element> </group> </root> 有任何想法吗?
这是Muenchian Grouping的工作.您将在StackOverflow中的XSLT标签中提供许多示例.
首先,您需要定义一个键来帮助您分组 <xsl:key name="groups" match="group" use="."/> 这将查找给定组名称的组元素. 接下来,您需要匹配每个distince组名称的所有出现的第一个实例.这是用这个可怕的陈述完成的 <xsl:apply-templates select="element/group[generate-id() = generate-id(key('groups',.)[1])]"/> 即匹配组元素,恰好是我们的密钥中该元素的第一次出现. 当您匹配不同的组节点时,您可以循环使用相同名称的所有其他组节点(其中$currentGroup是保存当前组名称的变量) <xsl:for-each select="key('groups',$currentGroup)"> 总而言之, <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="groups" match="group" use="."/> <xsl:template match="/root"> <root> <xsl:apply-templates select="element/group[generate-id() = generate-id(key('groups',.)[1])]"/> </root> </xsl:template> <xsl:template match="group"> <xsl:variable name="currentGroup" select="."/> <group> <xsl:attribute name="name"> <xsl:value-of select="$currentGroup"/> </xsl:attribute> <xsl:for-each select="key('groups',$currentGroup)"> <element> <id> <xsl:value-of select="../id"/> </id> <name> <xsl:value-of select="$currentGroup"/> </name> </element> </xsl:for-each> </group> </xsl:template> </xsl:stylesheet> 将其应用于您的示例XML,具有以下结果 <root> <group name="first"> <element> <id>1</id> <name>first</name> </element> <element> <id>3</id> <name>first</name> </element> </group> <group name="seccond"> <element> <id>2</id> <name>seccond</name> </element> </group> </root> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |