[xsl] Comma delimited parameters...

Subject: [xsl] Comma delimited parameters...
From: "Casadome, Francisco Javier" <Francisco.Casadome@xxxxxxxxxxxxxx>
Date: Tue, 18 Sep 2001 16:11:17 +0200
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>&#013;&#010;</xsl:text>
		<xsl:for-each select="Entry">
			<xsl:for-each select="*">
				<xsl:if
test="contains($Fields,concat(name(),','))">
					<xsl:value-of
select="."/><xsl:text>&#009;</xsl:text>
				</xsl:if>
			</xsl:for-each>
			<xsl:text>&#013;&#010;</xsl:text>
		</xsl:for-each>
	</xsl:template>

	<xsl:template match="*">
		<xsl:if test="contains($Fields,concat(name(),','))">
			<xsl:value-of
select="name()"/><xsl:text>&#009;</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


Current Thread