[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] conditional multiple outputs
Subject: RE: [xsl] conditional multiple outputs From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 14 May 2009 12:13:52 +0100 |
You might be interested that this problem is one of the use cases the XSL WG is studying in its work on streaming: how to generate multiple output files from a single input file processed in a single pass. We refer to it as the "coloured widget" problem based on the way it was originally expressed by Oliver Becker. (Who, like three-and-a-half of the contributors so far to this thread, happens to be German. Odd coincidence.) Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay > -----Original Message----- > From: drame@xxxxxxxxxxxxxxxxxxxxxxx > [mailto:drame@xxxxxxxxxxxxxxxxxxxxxxx] > Sent: 14 May 2009 11:36 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] conditional multiple outputs > > Hi, > > I am trying to generate multiple output files in a single > template (see xsl file below). The scenario is the following: > > 1. I read elements <title> one after the other from a input > file "content.xml" > 2. if the text of the element <title> begins with the > substring "file 1", then copy the element to the output file > file1.xml, if it begins with "file 2" then output to > file2.xml, else copy the element to file3.xml. > > The processor I use is Saxon B on .NET and XLST version is > 2.0. But my script does not work since I always have > following error message: > > E:\test\xsl>Transform -s:"e:\test\xsl\content.xml" > -xsl:"e:\test\xsl\import.xsl > Error at xsl:choose on line 8 of file:///e:/test/xsl/import.xsl: > XTDE1490: Cannot write more than one result document to the > same URI, or write to a URI > that has been read: file:/E:/test/xsl/file2.xml > Transformation failed: Run-time errors were reported > > > > Here are the script and the input file content.xml: > > <!--content.xml--> > <?xml version="1.0" encoding="UTF-8"?> > <groups> > <group> > <title>file 1 xxx </title> > <title>file 2 efg </title> > </group> > <group> > <title>file 2 xxx </title> > <title>file 3 abc </title> > </group> > <group> > <title>file 1 abc </title> > <title>file 3 xyz </title> > </group> > <group> > <title>file 2 zzz </title> > <title>file 2 ihk </title> > </group> > </groups> > > > > <!--multipleOutput.xsl--> > <?xml version="1.0"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="2.0"> > <xsl:output method="xml" indent="yes" encoding="utf-8"/> > <xsl:template name="test" match="/"> > <xsl:for-each select="groups/group"> > <xsl:for-each select="title"> > <xsl:variable > name="textOfTheElementTitle" > select="substring(./text(), 1, 6)"/> > <xsl:choose> > <xsl:when > test="matches($textOfTheElementTitle, > 'file 1', 'i')"> > > <xsl:result-document href="file1.xml"> > > <contentOfTitleElmt> > > <xsl:value-of select="./text()"/> > > </contentOfTitleElmt> > </xsl:result-document> > </xsl:when> > <xsl:when > test="matches($textOfTheElementTitle, > 'file 2', 'i')"> > > <xsl:result-document href="file2.xml"> > > <contentOfTitleElmt> > > <xsl:value-of select="./text()"/> > > </contentOfTitleElmt> > </xsl:result-document> > </xsl:when> > <xsl:otherwise> > > <xsl:result-document href="file3.xml"> > > <contentOfTitleElmt> > > <xsl:value-of select="./text()"/> > > </contentOfTitleElmt> > </xsl:result-document> > </xsl:otherwise> > </xsl:choose> > </xsl:for-each> > </xsl:for-each> > </xsl:template> > </xsl:stylesheet> > > Does somebody know why it does not work? Should I use another > function than xsl:result-document? > > Many thanks in advance, > Regards > > Horace
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] conditional multiple outp, Michael Müller-Hille | Thread | Re: [xsl] conditional multiple outp, David Carlisle |
Re: [xsl] conditional multiple outp, Michael Müller-Hille | Date | Re: [xsl] conditional multiple outp, David Carlisle |
Month |
Keywords