xsl-list
[Top] [All Lists]

Re: [xsl] Merging multiple documents and combining their nodes

2007-06-14 08:45:51
Thanks for the tip, Martin.

After adding a comma in the following line to clear up one final
error, I ran the stylesheet again without incident.

(<xsl:copy-of select="@*|key('c',@name)/*"/>

But there is no actual data in my output:

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns:exslt="http://exslt.org/common"/>

My input file (filenames_file.xml) references my three input XML docs:

<files>
        <file>file1.xml</file>
        <file>file2.xml</file>
        <file>file3.xml</file>
</files>

The three input XML docs include data in the components/component nodes:

<components>
   <component name="a" description="1">
        <childA>Value</childA>
        <childB>Value</childB>
   </component>
</components>

So, I can't figure out why my output contains no data.

Here is my current stylesheet (thanks to David and Martin):

<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(/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:stylesheet>


Does anyone see what is missing?

Thanks,
Mark


On 6/14/07, Martin Honnen <Martin(_dot_)Honnen(_at_)gmx(_dot_)de> wrote:

There is a closing ')' missing, you need

exslt:node-set($temp)/components/component[generate-id()=generate-id(key('c',@name))]

--~------------------------------------------------------------------
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>
--~--