RE: Need to output an opening or closing tag by itself
The output of a transformation is a tree of nodes. It is not lexical XML containing angle-bracket tags - those are produced from the result tree by the serializer. Creating a node on the result tree is an atomic operation, you can't create half a node. The problem you are tackling is called positional grouping, In XSLT 2.0 you can often tackle it using <xsl:for-each-group>. In 1.0 an appropriate technique is often sibling recursion, where you process a sequence of siblings one-by-one in a recursive template. You should be able to find these techniques using a google search. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: David Frey [mailto:dpfrey@xxxxxxx] > Sent: 25 June 2008 05:30 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Need to output an opening or closing tag by itself > > I have a simple XSLT problem for the gurus. > > > This is my input document: > <root> > <e t="a"/> > <f/> > <f/> > <e t="b"/> > </root> > > > This is the output document I want to produce: > <root> > <e> > <f/> > <f/> > </e> > </root> > > > This is the stylesheet I wrote to do the transformation: > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet > version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:template match="/root"> > <root> > <xsl:apply-templates/> > </root> > </xsl:template> > > <xsl:template match="e"> > <xsl:choose> > <xsl:when test="@t ='a'"> > <e> > </xsl:when> > <xsl:when test="@t ='b'"> > </e> > </xsl:when> > <xsl:otherwise> > <xsl:message terminate="yes"> > Unexpected data in attribute t. > </xsl:message> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > <xsl:template match="f"> > <xsl:copy/> > </xsl:template> > </xsl:stylesheet> > > > Here is the Saxon output: > $ java -jar "c:\Program Files\Saxon\saxon9.jar" -o out.xml > in.xml test.xslt Error on line 16 column 9 of > file:/C:/Documents%20and%20Settings/DFREY/Desktop/test/test.xslt: > SXXP0003: Error reported by XML parser: The element type > "e" must be terminated by the > matching end-tag "</e>". > Failed to compile stylesheet. 1 error detected. > > > I understand that the source of the error is that the XSLT > file is not valid XML because the <e> tag doesn't have a > matching </e> tag in the right place. > > How can I work around this issue to solve my problem? > > Thanks, > David
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format