[Home] [By Thread] [By Date] [Recent Entries]
Relative newbie question: XSLT 2.0, grouping with text nodes and
mixed text
I'm trying to convert a non-XML dictionary into XML. I've got it mostly done, but I want to input elements that currently look like <examples> <hop>source sentence 1</hop> translation of source sentence 1 <hop>source sentence 2</hop> translation of source sentence 2 <hop>source sentence 3</hop> a translation can be <emph>mixed</emph> text </examples> and transform them into this <examples>
<example-pair>
<hop>source sentence 1</hop>
<eng>translation of source sentence 1</eng>
</example-pair>
<example-pair>
<hop>source sentence 2</hop>
<eng>translation of source sentence 2</eng>
</example-pair>
<example-pair>
<hop>source sentence 3</hop>
<eng>a translation can be <emph>mixed</emph> text</eng>
</example-pair>
</examples>i.e. each original <hop> element in <examples> is followed by plain text or mixed text, not containing <hop> or <examples> elements. I want to group the nodes after each <hop> element and wrap them in <eng>...</eng> tags. I tried the following, and a few other variations, but the desired <eng> element comes out an empty <eng/> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform "> <xsl:output method="xml" indent="yes"/> <xsl:template match="examples"> <examples> <xsl:for-each-group select="*" group-starting-with="hop"> <example-pair> <!-- copy the hop element--> <xsl:copy-of select="."/> <!-- and then surround the mixed text following the hop element with eng tags --> <eng> <xsl:apply-templates select="current-group() except ."/> </eng> </example-pair> </xsl:for-each-group> </examples> </xsl:template> <!-- default copying of the document --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> Would some kind guru please tell me how I can do this? Thanks, Ken ****************************** Kenneth R. Beesley, D.Phil. P.O. Box 540475 North Salt Lake, UT 84054 USA
|

Cart



