Subject: Re: [xsl] Comma delimited parameters... From: "cutlass" <cutlass@xxxxxxxxxxx> Date: Wed, 19 Sep 2001 11:39:18 +0100 |
i think using the substring-before() is what u want to use to crack this see this technique in action at; http://www.dpawson.co.uk/xsl/sect2/N1755.html cheers, jim fuller ----- Original Message ----- From: "Casadome, Francisco Javier" <Francisco.Casadome@xxxxxxxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Tuesday, September 18, 2001 3:11 PM Subject: [xsl] Comma delimited parameters... > Hi all, > > I have an XSL receiving parameter that is a list of names separated by > commas, like this: > name1,name2,name3,name4,name5,name6, > (note that the last one also have a comma at the end) > > Then I have a XML file with nodes that may or may not have these names as > childs, like this: > > <myXML> > <node1> > <name1>XXX</name1> > <name3>CCC</name3> > </node1> > <node2/> > <node3> > <name3>AAA</name3> > <name6>QQQ</name6> > </node3> > </myXML> > > What I want to do is to create a TAB-separated file with all the names in > the parameter as the first line, like this: > > ----------------------------------- > name1 name2 name3 name4 name5 name6 > ----------------------------------- > XXX CCC > > AAA QQQ > ----------------------------------- > > This is the XSL I have right now: > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:output method="text" omit-xml-declaration="yes" indent="no"/> > <xsl:param name="Fields"/> > > <xsl:key name="AllPossibleFields" match="Entry/*" use="name()"/> > > <xsl:template match="Entries"> > <xsl:apply-templates select="Entry/*[count(. | > key('AllPossibleFields',name())[1]) = 1]"/> > <xsl:text>
</xsl:text> > <xsl:for-each select="Entry"> > <xsl:for-each select="*"> > <xsl:if > test="contains($Fields,concat(name(),','))"> > <xsl:value-of > select="."/><xsl:text>	</xsl:text> > </xsl:if> > </xsl:for-each> > <xsl:text>
</xsl:text> > </xsl:for-each> > </xsl:template> > > <xsl:template match="*"> > <xsl:if test="contains($Fields,concat(name(),','))"> > <xsl:value-of > select="name()"/><xsl:text>	</xsl:text> > </xsl:if> > </xsl:template> > > </xsl:stylesheet> > > Here you can see that what I do is to check if the current node plus a comma > is in the parameter list using the contains() function. I do this because I > don't know how to split this string without using an embed VBScript. > Also, I don't get name2, name4 and name5 in the header row, because there > isn't any node with such childs. > > Any great ideas ? > > Thanks in advance, > Frank. > > 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] Comma delimited parameter, Michael Kay | Thread | [xsl] Is this a valid expression?, Christian Cäsar |
[xsl] flat file transform (one more, Philipp Chudinov | Date | RE: [xsl] how to realize document(), Jarno . Elovirta |
Month |