Subject: Re: [xsl] Merging multiple documents and combining their nodes From: "Mark Peters" <flickrmeister@xxxxxxxxx> Date: Wed, 13 Jun 2007 20:43:12 -0400 |
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.)
<?xml version="1.0" encoding="UTF-8"?> <components xmlns:exslt="http://exslt.org/common"/>
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
<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>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Merging multiple document, David Carlisle | Thread | Re: [xsl] Merging multiple document, David Carlisle |
Re: [xsl] Incrementing a counter, David Carlisle | Date | [xsl] Comparison Table for XML file, Dan Johnson |
Month |