Subject: RE: [xsl] multiple source files map to multiple target files From: "Gosselin, Michael" <Michael.Gosselin@xxxxxxxxxxxxxxxxxxxxx> Date: Thu, 6 Apr 2006 13:19:38 -0400 |
Hi Evan et al, I am having a problem with document() as well. Assume I have a file "file.xml", which I will generate occasionally and want to merge into my document. The current XSLT (call it "current.xsl") doesn't call this file right now; the main file is named, oh, "main.xml". The file "file.xml" looks like this: <file> <first>the first element</first> <second>the second element</second> <third>the third element</third> </file> How do I call the document() function to get the individual nodes out of the file "file.xml" to be used by FOP in "current.xsl"? I tried a merge, but it basically gave me all of both files, then formatted according to the "current.xsl". Do I need to create a second style sheet to use with xsl:apply-templates? The information I found on the document() function wasn't extensive. Thanks, Michael Gosselin Athena Diagnostics, Inc. Worcester, MA 01605 > -----Original Message----- > From: Evan Lenz [mailto:evan@xxxxxxxxxxxx] > Sent: Thursday, April 06, 2006 12:04 PM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] multiple source files map to multiple target files > > However, assuming you have the XML source file that contains > the list of file names (URLs) that Michael mentioned, then a > single invocation of > document() can return all the root nodes from your XML files. > (You don't have to do it individually for each one, e.g., > inside <xsl:for-each>.) And you don't need any extension > functions to do this. > > Let's say you have a file named files.xml in the "config" > directory that contains this: > > <files> > <file>input/foo.xml</file> > <file>input/bar.xml</file> > <file>input/bat.xml</file> > </files> > > Given the above document, the following expression will > return a node-set containing three root nodes, corresponding > to the three files listed. > > document(document('config/files.xml')/files/file) > > The file names are resolved relative to the location of > files.xml by default, i.e. from the "config" directory in > this case. The XSLT processor will look for an "input" > directory inside the "config" > directory. If you want to resolve them relative to your main > source document (rather than from the "config" directory), > then you could use the second (optional) argument to the > document() function, like so: > > document(document('config/files.xml')/files/file, /) > > The / in the second argument tells the function to resolve > the URLs relative to the base URI of the source document > instead of from the config directory (where files.xml lives). > The XSLT processor will look for an "input" directory inside > whatever directory your source document came from. > > Finally, if you want to resolve them relative to the > stylesheet's base URI, you would use this: > > document(document('config/files.xml')/files/file, document('')) > > The document('') in the second argument returns the root node > of the stylesheet itself, so the relative URLs in files.xml > are resolved relative to the base URI of the stylesheet. The > XSLT processor will look for an "input" directory insider > whatever directory your stylesheet came from. > > One more note: all the above examples assume that the > "config" directory is in the same directory as the > stylesheet. When you pass document() a string as the first > argument it assumes the base URI of the stylesheet. > When you pass it a node-set as the first argument (as we did > with the <file> elements), then the function uses the base > URI of each node in the node-set. In either case, you can > override the base URI behavior by using the second optional > argument (which must be a node-set). So, for example, if the > "config" directory is in the same location as your source > document, then you'd want to substitute this to grab the root > node of files.xml in each of the above examples: > > document('config/files.xml', /)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] multiple source files map, Evan Lenz | Thread | Re: [xsl] multiple source files map, Jon Gorman |
Re: [xsl] multiple source files map, Evan Lenz | Date | Re: [xsl] multiple source files map, Jon Gorman |
Month |