Hi David,
The first stylesheet doesn't seem to find my XML documents. (The
filenames_file.xml file and the XML documents it lists are in the same
folder as my stylesheet.)
The output is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns:exslt="http://exslt.org/common"/>
I tried running the second stylesheet, but it returned the following error:
Expected ,, but found: ]
Unfortunately, I don't know enough about keys and variables to know
what's going on in this stylesheet. :-(
select="document(document('filenames_file.xml')/files/file)/components/component"/>
also, if filenames_file.xml is your main inut you don't need pull it in
again with document, just
select="document(/files/file)/components/component"/>
If I don't reference the filenames_file.xml document in the
stylesheet, where would I reference it? In other words, how would the
stylesheet know which XML files I want to include as input?
Thanks,
Mark
On 6/13/07, David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk> wrote:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:variable name="temp">
<components>
<xsl:copy-of
select="document(document('filenames_file.xml')/files/file)/components/component"/>
</components>
</xsl:variable>
<components>
<xsl:for-each
select="exslt:node-set($temp)/components/component">
<xsl:sort select="@name"/>
<name>
<xsl:value-of select="@name"/>
</name>
..
</xsl:for-each>
</components>
</xsl:template>
</xsl:styleseet>
will merge and sort the components. Replacing the xsl:sort by a grouping
idiom will finish the job, something like (untested>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:variable name="temp">
<components>
<xsl:copy-of
select="document(document('filenames_file.xml')/files/file)/components/component"/>
</components>
</xsl:variable>
<components>
<xsl:for-each
select="exslt:node-set($temp)/components/component[generate-id()=generate-id(key('c',@name)]">
<xsl:sort select="@name"/>
<xsl:copy>
<xsl:copy-of select="@*|key('c'@name)/*"/>
</xsl:copy>
</xsl:for-each>
</components>
</xsl:template>
<xsl:key name="c" match="component" use="@name"/>
</xsl:styleseet>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--