- From: Teresa Rippeon <teresa.rippeon@mantech-stc.com>
- Date: Thu, 12 Jun 2003 08:44:17 -0400
- To: <www-xsl-fo@w3.org>
- Message-ID: <000001c330e0$56ca9370$5701015d@RIGEL>
I am transforming XML data to XML data and want to insert an ID for each
child element of a particular parent:
For example, I have the following XML data:
<Block ID="B_35000">
<BlockLabel>Introduction</BlockLabel>
<BlockContent>
<Para>This is the RLO introduction</Para>
<List>
<ListTitle>LIST TITLE</ListTitle>
<ListParagraphText>THi is th paragraph text prior to the
list: </ListParagraphText>
<ListItem>
<Para>This is the first list item</Para>
</ListItem>
<ListItem/>
<ListItem>
<Para>This is the second list item</Para>
</ListItem>
</List>
<Para>This is the paragraph after the list</Para>
</BlockContent>
</Block>
I would like to add in an ID for each Para and List element of the
BlockContent element, based on the Block elements ID. The requested
result is as follows:
<Block ID="B_35000">
<BlockLabel>Introduction</BlockLabel>
<BlockContent>
<Para ID="B_35000_1">This is the RLO introduction</Para>
<List ID="B_35000_2">
<ListTitle>LIST TITLE</ListTitle>
<ListParagraphText>THi is th paragraph text prior to the
list: </ListParagraphText>
<ListItem>
<Para>This is the first list item</Para>
</ListItem>
<ListItem/>
<ListItem>
<Para>This is the second list item</Para>
</ListItem>
</List>
<Para ID="B_35000_3">This is the paragraph after the list</Para>
</BlockContent>
</Block>
I am currently using the following XSL code, which obviously goes
through the Para elements first, then the List elements second, so it
destroys the original order:
<xsl:template match="Block">
<xsl:element name="Block">
<xsl:variable name="BLOCKID" select="@ID"></xsl:variable>
<xsl:attribute name="ID" >
<xsl:value-of select="$BLOCKID"/>
</xsl:attribute>
<xsl:apply-templates select="BlockLabel"></xsl:apply-templates>
<xsl:for-each select="BlockContent">
<xsl:element name="BlockContent">
<xsl:for-each select="Para">
<xsl:element name="Para">
<xsl:attribute name="ID">
<xsl:value-of select="$BLOCKID"></xsl:value-of>
<xsl:text>_</xsl:text>
<xsl:value-of select="position()"></xsl:value-of>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="List">
<xsl:element name="List">
<xsl:attribute name="ID">
<xsl:value-of select="$BLOCKID"></xsl:value-of>
<xsl:text>_</xsl:text>
<xsl:value-of select="position()"></xsl:value-of>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
How can I get the element name and write out the element name with the
appropriate attribute based on the $BLOCKID and position of the element,
and then obviously write out the element content? I think I did
something like this months ago, but can't seem to come up with it again.
Any help would be appreciated!
Thanks.
Teresa Rippeon
ManTech
teresa.rippeon@mantech-stc.com
Received on Thursday, 12 June 2003 09:05:15 UTC