hi there,
i've got a flat xml document and need some hierachy in there. the first
approach was promising, but now i'm stuck how to fix the last bit.
i think i could do a procedural style, but i guess theres an elegant
solution for the problem.
i would like to put any group of "einschub" elements in a separate
container. this works fine when there's an other element inbetween. but
fails with different "einschub" sibling-elements.
step by step:
1. source doc:
<kapitel>
<abs>abs</abs>
<einschub1>einschub1</einschub1>
<einschub1>einschub1</einschub1>
<abs>abs</abs>
<einschub1>einschub1</einschub1>
<einschub2>einschub2</einschub2>
<abs>abs</abs>
<abs>abs</abs>
</kapitel>
2. xslt
<xsl:template match="kapitel">
<xsl:element name="kapitel">
<xsl:for-each-group select="*"
group-adjacent="starts-with(local-name(),'einschub')" >
<xsl:choose>
<xsl:when test="current-grouping-key()">
<xsl:element name="einschub">
<xsl:attribute name="typ"
select='replace(local-name(), "[^\d]+", "")'/>
<xsl:apply-templates select="current-group()"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:element>
</xsl:template>
<xsl:template match="einschub1|einschub2">
<xsl:element name="abs">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
3. output with saxon9
<kapitel>
<abs>abs</abs>
<einschub typ="1">
<abs>einschub1</abs>
<abs>einschub1</abs>
</einschub>
<abs>abs</abs>
<einschub typ="1">
<abs>einschub1</abs>
<abs>einschub2</abs>
</einschub>
<abs>abs</abs>
<abs>abs</abs>
</kapitel>
4. desired output
<kapitel>
<abs>abs</abs>
<einschub typ="1">
<abs>einschub1</abs>
<abs>einschub1</abs>
</einschub>
<abs>abs</abs>
<einschub typ="1">
<abs>einschub1</abs>
</einschub>
<einschub typ="2">
<abs>einschub2</abs>
</einschub>
<abs>abs</abs>
<abs>abs</abs>
</kapitel>
any help is greatly appreciated!
all the best,
gregor
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--