我有一块
XML要用XSLT转换(使用xsltproc – 所以只有XSLT 1.0).原始XML使用一些标记作为分隔符,如下所示:
<container> <element /> <element /> <separator /> <element /> <element /> <element /> <separator /> <element /> </container>
我需要将其转换为包含这些元素的格式.所以我需要它看起来像这样:
<container> <wrapper> <element /> <element /> </wrapper> <wrapper> <element /> <element /> <element /> </wrapper> <wrapper> <element /> </wrapper> </container>
我似乎无法设计一个实现这一目标的模板.有人有什么想法吗?
这种转变:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:key name="kFollowing" match="element" use="generate-id(preceding-sibling::separator[1])"/> <xsl:template match="/*"> <container> <xsl:apply-templates select= "element [generate-id() = generate-id(key('kFollowing',generate-id(preceding-sibling::separator[1]) )[1] ) ]"/> </container> </xsl:template> <xsl:template match="element"> <wrapper> <xsl:copy-of select= "key('kFollowing',generate-id(preceding-sibling::separator[1]) )"/> </wrapper> </xsl:template> </xsl:stylesheet>
当应用于提供的XML文档时:
<container> <element /> <element /> <separator /> <element /> <element /> <element /> <separator /> <element /> </container>
产生想要的,正确的结果:
<container> <wrapper> <element/> <element/> </wrapper> <wrapper> <element/> <element/> <element/> </wrapper> <wrapper> <element/> </wrapper> </container>