[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[xsl] Solution: for Recursively merge (aggregate) and traverse DOM trees (XML files)
Subject: [xsl] Solution: for Recursively merge (aggregate) and traverse DOM trees (XML files) From: Laky Tang <tulaky@xxxxxxxxx> Date: Sat, 24 Jun 2006 21:39:08 -0700 (PDT) |
Thanks Michael Kay! Your suggestion worked. And the "<?xml versionfiltered="1.0".... part must have crept in while I was copy pasting it thru openoffice writer! For anybody that might be interested, here is the XSLT that works for my example. <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes" xmlns:xlink="http://www.w3.org/1999/xlink"> <xsl:template match="a"> <html> <head> <title>Sample</title> </head> <body> <h1> <center> Sample </center> </h1> <p/> <table border="2" bgcolor="yellow"> <tr> <th>P</th> <th>Q</th> <th>text</th> </tr> <xsl:apply-templates/> </table> </body> </html> </xsl:template> <xsl:template match="a" mode="child"> <xsl:apply-templates/> </xsl:template> <xsl:template match="b"> <!--xsl:for-each select="//b"--> <xsl:choose> <xsl:when test="@url"> <xsl:apply-templates select="document(@url)" mode="child"/> </xsl:when> <xsl:otherwise> <tr> <td> <xsl:value-of select="@p"/> </td> <td> <xsl:value-of select="@q"/> </td> <td> <xsl:value-of select="."/> </td> </tr> </xsl:otherwise> </xsl:choose> <!--/xsl:for-each--> </xsl:template> </xsl:stylesheet> Date: Tue, 20 Jun 2006 08:15:44 +0100 To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> From: "Michael Kay" <mike@xxxxxxxxxxxx> Subject: RE: [xsl] Recursively merge (aggregate) and traverse DOM trees (XML files)? Message-ID: <005101c69439$58ad58c0$6401a8c0@turtle> Your stylesheet needs to include within it an instruction such as <xsl:apply-templates select="document(@url)"/> to dereference the links and recursively process the referenced document. I don't know what this is supposed to be: <?xml versionfiltered="1.0" encoding="UTF-8"?> but it isn't XML. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Laky Tang [mailto:tulaky@xxxxxxxxx] > Sent: 20 June 2006 03:46 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Recursively merge (aggregate) and traverse DOM > trees (XML files)? > > I am trying to recursively merge a tree of XML files and then > apply some templates to it. I googled and also searched this > mailing list but did not find any help. I hope this is > possible using XSLT. Can somebody please point me in the > right direction? > > Here is a sample of the input files and desired output. I > tried a sample.xsl (see below)which only goes thru the root > file, but need help in making it recursively go thru all the > linked files as well. > > Thanks in advance, > Laky, Tang > ----------------- > sample1.xml : > <?xml versionfiltered="1.0" encoding="UTF-8"?> > <?xml-stylesheet type="text/xsl" href="sample.xsl"?> <a> <b p > ="key1" q="2"> xxx </b> <b url = "sample2.xml"></b> <b p > ="key10" q ="27">yyyy</b> </a> > > sample2.xml : > <?xml versionfiltered="1.0" encoding="UTF-8"?> <a> <b p > ="key4" q="22"> xxx2 </b> <b url = "sample3.xml"></b> <b p > ="key7" q ="37">yyyy2</b> <b url = "sample4.xml"></b> </a> > > sample3.xml : > <?xml versionfiltered="1.0" encoding="UTF-8"?> <a> <b p > ="key5" q="23"> xxx3 </b> <b p ="key6" q ="26">yyyy3</b> </a> > > sample4.xml : > <?xml versionfiltered="1.0" encoding="UTF-8"?> <a> <b p > ="key8" q="24"> xxx4 </b> <b p ="key9" q ="25">yyyy4</b> </a> > > sample.xsl : > <?xml versionfiltered="1.0" encoding="UTF-8"?> > <xsl:stylesheet versionfiltered="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:fo="http://www.w3.org/1999/XSL/Format" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:fn="http://www.w3.org/2005/02/xpath-functions" > xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes" > xmlns:xlink="http://www.w3.org/1999/xlink"> > <xsl:template match="/"> > <html> > <head> > <title>Sample</title> > </head> > <h1> > <center> > </center> > </h1> > <p/> > <xsl:for-each xml:space="default" select="param"> > <xsl:value-of select="."/> </xsl:for-each> <table border="2" > bgcolor="yellow"> <tr> <th>P</th> <th>Q</th> <th>text</th> > </tr> <xsl:for-each select="//b"> <tr> <td> <xsl:value-of > select="@p"/> </td> <td> <xsl:value-of select="@q"/> </td> > <td> <xsl:value-of select="."/> </td> </tr> </xsl:for-each> > </table> </html> </xsl:template> </xsl:stylesheet> > > > Desired output (preferably as a html table): > > P Q text > key1 2 xxx > key4 22 Xxx2 > key5 23 xxx3 > key6 26 yyy3 > Key7 37 yyy2 > key8 24 xxx4 > key9 25 yyy4 > key10 27 yyyy > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Removing elements based o, cknell | Thread | [xsl] RE: Subject: RE: [xsl] node c, uppaluri satyaprasad |
Re: [xsl] [FXSL] Using document(''), Florent Georges | Date | [xsl] RE: Subject: RE: [xsl] node c, uppaluri satyaprasad |
Month |