|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Comma delimited parameters...
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: 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






