Christian Oshiro wrote:
This seems like a pretty simple thing to do, but I usually rely on nested xml.
How can I tranform xml that looks like this:
<para role=title>main title1</para>
<para role=subtitle>subtitle1</para>
<para>This is the body of the paragraph. 1</para>
<list>some stuff 1</list>
<para role=title>main title2</para>
<para role=subtitle>subtitle2</para>
<para>This is the body of the paragraph. 2</para>
<list>some stuff 2</list>
<para role=title>main title3</para>
<para role=subtitle>subtitle3</para>
<para>This is the body of the paragraph. 3</para>
<list>some stuff 3</list>
I'd like to transform this using xlst to something like this:
<paragraph>
<title>main title1</title>
<subtitle>subtitle1</subtitle>
<body>This is the body of the paragraph. 1</body>
<list>some stuff 1</list>
</paragraph>
<paragraph>
<title>main title2</title>
<subtitle>subtitle2</subtitle>
<body>This is the body of the paragraph. 2</body>
<list>some stuff 2</list>
</paragraph>
<paragraph>
<title>main title3</title>
<subtitle>subtitle3</subtitle>
<body>This is the body of the paragraph. 3</body>
<list>some stuff 3</list>
</paragraph>
So i need to go node by node and test when role=title shows up. Thanks for the
insight.
Here is an XSLT 2.0 stylesheet:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="doc">
<xsl:copy>
<xsl:for-each-group select="*" group-starting-with="para[(_at_)role =
'title']">
<paragraph>
<xsl:apply-templates select="current-group()"/>
</paragraph>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="para[(_at_)role = 'title']">
<title><xsl:apply-templates/></title>
</xsl:template>
<xsl:template match="para[(_at_)role = 'subtitle']">
<subtitle><xsl:apply-templates/></subtitle>
</xsl:template>
<xsl:template match="para[not(@role)]">
<body><xsl:apply-templates/></body>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
--
Martin Honnen
http://msmvps.com/blogs/martin_honnen/
--~------------------------------------------------------------------
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>
--~--