Subject: Re: [xsl] xsl:copy - change attributes and tag name From: "Joerg Heinicke" <joerg.heinicke@xxxxxx> Date: Sun, 7 Apr 2002 02:14:37 +0200 |
For such tasks <xsl:key> is the best approach. <xsl:stylesheet> <!-- build a lookup-table with @IdRef as key --> <xsl:key name="Indice" match="Indice" use="@IdRef"/> <xsl:template match="TreeData"> <tree> <xsl:apply-templates select="Indice[not(@IdRef)]"/> </tree> </xsl:template> <xsl:template match="Indice"> <tree> <xsl:apply-templates select="@*"/> <!-- add here new attributes via <xsl:attribute/> --> <!-- applies templates to all attributes and all elements in the lookup-table named 'Indice', which have as their @IdRef the value of the current @IdIndice --> <xsl:apply-templates select="key('Indice', @IdIndice)"/> </tree> </xsl:template> <xsl:template match="@*"> <xsl:copy-of select="."/> </xsl:template> <xsl:template match="@Nombre"> <xsl:attribute name="text"><xsl:value-of select="."/></xsl:attribute> </xsl:template> </xsl:stylesheet> Does this solve all your problems and answer all your questions? Joerg > Hi folks! > I have this parent-child xml. > <TreeData> > <Indice IdIndice="1" Nombre="Omint Analisis" /> > <Indice IdIndice="3" IdRef="1" Nombre="OMINT: Precios"/> > <Indice IdIndice="4" IdRef="1" Nombre="210 / Omint"/> > <Indice IdIndice="5" Nombre="Swiss Medical Analisis"/> > <Indice IdIndice="6" IdRef="5" Nombre="Swiss Precios"/> > <Indice IdIndice="7" IdRef="1" Nombre="310 / Omint"/> > <Indice IdIndice="8" IdRef="7" Nombre="Cobertura" IdDoc="1"/> > </TreeData> > > What I want to do is putting it into a hierarchical format, which I do with > this xsl > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > <xsl:template match="/"> > <tree> > <xsl:apply-templates select="TreeData/*[not(@IdRef)]"/> > </tree> > </xsl:template> > > <xsl:template match="*|@*"> > <xsl:copy> > <xsl:apply-templates select="//*[@IdRef = current()/@IdIndice]|@*"/> > </xsl:copy> > </xsl:template> > </xsl:stylesheet> > > So I get > <tree> > <Indice IdIndice="1" Nombre="Omint Analisis"> > <Indice IdIndice="3" IdRef="1" Nombre="OMINT: Precios Directos" /> > <Indice IdIndice="4" IdRef="1" Nombre="210 / Omint" /> > <Indice IdIndice="7" IdRef="1" Nombre="310 / Omint"> > <Indice IdIndice="8" IdRef="7" Nombre="Cobertura" IdDoc="1" /> > </Indice> > </Indice> > <Indice IdIndice="5" Nombre="Swiss Medical Analisis"> > <Indice IdIndice="6" IdRef="5" Nombre="Swiss Precios" /> > </Indice> > </tree> > > Now I want 3 things: > 1. instead of generate <Indice> tags I want to get <tree> tags. > So I would get > <tree> > <tree ... /> > <tree ..> > <tree ..> > </tree> > </tree> > > 2. I want to change the "Nombre" attribute to "text" attribute > So I would have > <tree text="210/Omint" ...> > 3. How do I add another attribute to each entry? > <tree text="..." addedAttr="something"> > > thanks in advance! > Matias XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] xsl:copy - change attribu, Matias Woloski | Thread | RE: [xsl] Book recommendation (was:, Matias Woloski |
RE: [xsl] xsl:copy - change attribu, Matias Woloski | Date | RE: [xsl] Book recommendation (was:, Matias Woloski |
Month |