xml – 使用XSLT将分隔符转换为包装器
发布时间:2020-12-16 23:50:09 所属栏目:百科 来源:网络整理
导读:我有一块 XML要用XSLT转换(使用xsltproc – 所以只有XSLT 1.0).原始XML使用一些标记作为分隔符,如下所示: container element / element / separator / element / element / element / separator / element //container 我需要将其转换为包含这些元素的格式.
我有一块
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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |