在xml / xslt中对相同节点的子组进行分组/合并
我是XSLT的新手,手动更改它需要花费很多时间.
<GroupData ID="xxx" Key="4" Temp="yyy"> <ItemData ID="zzz" Value="3"/> </GroupData> <GroupData ID="xxx" Key="4" Temp="yyy"> <ItemData ID="www" Value="1982"/> </GroupData> 我希望将这些多个GroupData节点的子节点放在同一个组中,即 <GroupData ID="xxx" Key="4" Temp="yyy"> <ItemData ID="zzz" Value="3"/> <ItemData ID="www" Value="1982"/> </GroupData> 所以我需要在GroupData的ID和Key属性上合并/组合/匹配它们(这些属性在文件中有所不同).还有一些没有Key属性.我怎样才能做到这一点?我读了一些其他的线程(例如,在C#中,但我没有这个可供我使用),我检查了W3学校,但这些都是非常基本的例子.我正在使用最新的XML Tools 2.3.2 r908 unicode(beta4)for Notepad来应用可能的转换(不知道它是否支持XSLT2.0或XSLT1.0). 编辑:尝试下面的建议和我遇到的各种事情,因为它有多个级别,可能没有唯一的ID: 解决方法
这个XSLT 1.0转换:
<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:key name="kGDByIdKey" match="GroupData" use="concat(@ID,'+',@Key)"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match= "GroupData [generate-id() = generate-id(key('kGDByIdKey',concat(@ID,@Key))[1]) ]"> <xsl:copy> <xsl:apply-templates select= "@*|key('kGDByIdKey',@Key))/node()"/> </xsl:copy> </xsl:template> <xsl:template match="GroupData"/> </xsl:stylesheet> 应用于此XML文档时: <t> <GroupData ID="xxx" Key="4" Temp="yyy"> <ItemData ID="zzz" Value="3"/> </GroupData> <GroupData ID="yyy" Key="4" Temp="yyy"> <ItemData ID="abc" Value="3"/> </GroupData> <GroupData ID="zzz" Temp="yyy"> <ItemData ID="pqr" Value="1982"/> </GroupData> <GroupData ID="xxx" Key="4" Temp="yyy"> <ItemData ID="www" Value="1982"/> </GroupData> <GroupData ID="yyy" Key="4" Temp="yyy"> <ItemData ID="def" Value="1982"/> </GroupData> <GroupData ID="zzz" Temp="yyy"> <ItemData ID="tuv" Value="1982"/> </GroupData> </t> 产生想要的,正确的结果: <t> <GroupData ID="xxx" Key="4" Temp="yyy"> <ItemData ID="zzz" Value="3"/> <ItemData ID="www" Value="1982"/> </GroupData> <GroupData ID="yyy" Key="4" Temp="yyy"> <ItemData ID="abc" Value="3"/> <ItemData ID="def" Value="1982"/> </GroupData> <GroupData ID="zzz" Temp="yyy"> <ItemData ID="pqr" Value="1982"/> <ItemData ID="tuv" Value="1982"/> </GroupData> </t> 说明: 正确使用Muenchian grouping method和identity rule. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |