Subject: RE: [xsl] merging generic elements in a parent-child relationship From: "Matias Woloski" <woloski@xxxxxxxx> Date: Wed, 26 Jun 2002 01:04:51 -0300 |
thanks David, This works perfect for the test file I've provided. But actually will fail because I could have something like this <?xml version="1.0" encoding="UTF-8"?> <root> <a idCountry="1" id="abc" /> <a idCountry="2" id="abcd" /> <b id="b1" idPerson="abc"/> <b id="b2" idPerson="abc"/> <b id="b3" idPerson="abcd"/> </root> Note the idCountry attribute which makes the conditions @*[starts-with(name(.),'id') and (name() != 'id')] to fail. I will explain a little bit more my problem. This XML is generated through SQL Server with FOR XML AUTO. So I execute something like SELECT * FROM Person FOR XML AUTO SELECT * FROM Email FOR XML AUTO This could generate something like this. <?xml version="1.0" encoding="UTF-8"?> <root> <Person idCountry="1" id="1" /> <Person idCountry="2" id="2" /> <Email id="1" idPerson="1"/> <Email id="2" idPerson="1"/> <Email id="3" idPerson="2"/> </root> this denotes a relation between Person-Emails. And there could be a lot of attributes as foreign keys like idCountry which doesn't have relation with anything inside the xml. How this can be solved? Also I have another question. Is there anyway to wrap the Email elements into another element Emails, like this <?xml version="1.0" encoding="UTF-8"?> <root> <Person idCountry="1" id="1"> <Emails> <Email id="1" idPerson="1"/> <Email id="2" idPerson="1"/> </Emails> </Person> <Person idCountry="2" id="2"> <Emails> <Email id="3" idPerson="2"/> </Emails> </Person> </root> thanks a lot for your help! Matias p.s Joerg the xslt you provided doesn't fit my needs because it's specific to one xml doc and I need to be generic. thanks anyway. > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of David > Carlisle > Sent: martes, 25 de junio de 2002 19:14 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] merging generic elements in a parent-child > relationship > > > > This may be too generic, it doesn't hard code any element names > but it doesn't use a parameter to limit them either, if you need to > paramaterise it you may need to replace * by *[contains($param,name()] > or some such, but this produces teh specified output on teh test file > > David > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > <xsl:output indent="yes"/> > > <xsl:key name="idx" match="*" use="@*[starts-with(name(.),'id') and > (name() != 'id')]"/> > > <xsl:template match="root"> > <root> > <xsl:apply-templates select="*[not(@*[starts-with(name(.),'id') and > (name() != 'id')])]"/> > </root> > </xsl:template> > <xsl:template match="*"> > <xsl:copy> > <xsl:copy-of select="@*"/> > <xsl:apply-templates select="key('idx',@id)"/> > </xsl:copy> > </xsl:template> > > </xsl:stylesheet> > > _____________________________________________________________________ > This message has been checked for all known viruses by Star Internet > delivered through the MessageLabs Virus Scanning Service. For further > information visit http://www.star.net.uk/stats.asp or alternatively call > Star Internet for details on the Virus Scanning Service. > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Xquery Implementation, Michael Kay | Thread | Re: [xsl] merging generic elements , David Carlisle |
Re: [xsl] Round trip: Binary -> XML, Brian Grainger | Date | Re: [xsl] Date in document !, Jarkko . Moilanen |
Month |