You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xalan.apache.org by Robinson Simon <Si...@newton.co.uk> on 2003/03/25 11:47:28 UTC

Problems using xsl:if with Xalan/JSP

I have some XML and XSLT similar to the code below. I am trying to select as in this example all FirstName elements with the first name Simon for example, then show all the ClassName elemnts that the person studies. I want to pass in a parameter from a web page using JSP that does the transform and then sends the value back to the browser.

The problem is when I run the transform through XMLSpy it picks up the value of the parameter and does the search fine, as in the ouput below

Start of transform ClassId
French
Start of transform StudentName with new testSimonSimon   <--- The transform through XMLSpy has done the <xsl:if> correctly --->
Start of transform ClassId
German
Start of transform StudentName with new testSimon
Start of transform ClassId
German
Start of transform StudentName with new testSimon

But when I run the transform through using a JSP to pass in the parameter it picks up the value ok in the stylesheet as the output confirms but it does not use the value of the parameter anywhere in the <xsl:if> and the test fails as the output below shows. I have tried different ways to find the correct element but when I use the value of the parameter all fails.

Start of transform ClassId
French
Start of transform StudentName with new testSimon  <--- The transform through the JSP has picked up the parameter but does not do the <xsl:if> correctly --->
Start of transform ClassId
German
Start of transform StudentName with new testSimon 
Start of transform ClassId
German
Start of transform StudentName with new testSimon 

I am using j2sdk1.4.1_01, tomcat 4.0.3,xalanj2.0.1.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" indent="yes"/>
<xsl:param name="attributeid">Simon</xsl:param>
<xsl:template match="* | /"/>
<xsl:template match="/">
<xsl:apply-templates select="LectureList"/>
</xsl:template>

<xsl:template match="LectureList">
<br/>
<br/>
<xsl:apply-templates select="ClassId"/>
</xsl:template>

<xsl:template match="ClassId">
<xsl:text>Start of transform ClassId</xsl:text>
<br/>
<xsl:value-of select="ClassName"/>
<xsl:apply-templates select="StudentName"/>
</xsl:template>

<xsl:template match="StudentName">
<br/>	
<xsl:text>Start of transform StudentName with new test</xsl:text>
<xsl:apply-templates select="FirstName"/>
<xsl:copy-of select="$attributeid"/>
<br/>
</xsl:template>

<xsl:template match="FirstName[.=$attributeid]">
<xsl:value-of select="."/>

</xsl:template>
</xsl:stylesheet>

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) -->
<!-- Created by sro on 21 March 2003, 09:56 -->
<LectureList>
	<ClassId>
		<ClassName>French</ClassName>
		<StudentName>
			<FirstName>Simon</FirstName>
			<LastName>Robinson</LastName>
		</StudentName>
	</ClassId>
	<ClassId>
		<ClassName>German</ClassName>
		<StudentName>
			<FirstName>John</FirstName>
			<LastName>Snow</LastName>
		</StudentName>
	</ClassId>
	<ClassId>
		<ClassName>German</ClassName>
		<StudentName>
			<FirstName>Mary</FirstName>
			<LastName>Dillinger</LastName>
		</StudentName>
	</ClassId>
</LectureList>