This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Comma delimited parameters...
- To: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Subject: [xsl] Comma delimited parameters...
- From: "Casadome, Francisco Javier" <Francisco dot Casadome at bowneglobal dot es>
- Date: Tue, 18 Sep 2001 16:11:17 +0200
- Reply-To: xsl-list at lists dot mulberrytech dot com
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