Subject: [xsl] Conditioned merge of XML from two files From: "Karl Koch" <TheRanger@xxxxxxx> Date: Wed, 27 Jul 2005 22:43:42 +0200 (MEST) |
Hello Experts, I have a question resulting from a problem I could not resolve. I have one XML file which contains information about books (books.xml). I have a second xml file which contains information about book locations (locations.xml). I have a location id in books.xml and each location in locations.xml has a location id of the same sort. I would like to have a stylesheet that looks up the ids from books.xml in locations.xml and copies the location into a certain position of the book. After the transformation, each book in books.xml has a location XML stubstructure. Here example data from both XML files: (books.xml - only one book to keep it short) <bookshelf> <book> <id>1</id> <title>Alice in Wonderland</title> <desc>Alice is tumbling down the rabit hole.</desc> <location> <loc_id>L2</loc_id> </location> </book> ... and many many more ... </bookshelf> (locations.xml - only one location to keep it short) <locations> <location> <loc_id>L1</loc_id> <name>Location 1</name> ... many more attributes... </location> .. many more locations </locations> After the transformation I wouild like to have the following: <bookshelf> <book> <id>1</id> <title>Alice in Wonderland</title> <desc>Alice is tumbling down the rabit hole.</desc> <location> <loc_id>L1</loc_id> <name>Location 1</name> ... many more attributes... </location> </book> ... and many many more ... </bookshelf> I have developed the following XSLT: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" encoding="UTF-8" /> <xsl:strip-space elements="*" /> <xsl:variable name="locationFile" select="document('locations.xml')" /> <!-- Match with root --> <xsl:template match="/"> <bookshelf> <xsl:for-each select="/bookshelf/book"> <book> <xsl:apply-templates select="." /> </book> </xsl:for-each> </bookshelf> </xsl:template> <xsl:template match="event"> <xsl:copy-of select="./id" /> <xsl:copy-of select="./title" /> <xsl:copy-of select="./desc" /> <location> <xsl:copy-of select="$locationFile/locations/location/*[.//location/loc_id=$locationFile/locations//location/id]"/> </location> </xsl:template> </xsl:stylesheet> ... however, it does not work: What is wrong? I guess it is far from optimal anyway so I am happy to get completely different solutions as well. As you can see in the stylesheet, I would like to "hardcode" the lcoations file, but provide the book data as parameter (for flexiblity reasons). Any form of help would be highly appreciated. Kind regards, Karl -- 5 GB Mailbox, 50 FreeSMS http://www.gmx.net/de/go/promail +++ GMX - die erste Adresse f|r Mail, Message, More +++
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] how to match true and fal, Adrian_Rios | Thread | RE: [xsl] Conditioned merge of XML , Michael Kay |
Re: [xsl] how to match true and fal, Christian Rasmussen | Date | RE: [xsl] Conditioned merge of XML , cknell |
Month |