Improving XSLT code

G. Ken Holman gkholman at CraneSoftwrights.com
Mon Jul 12 22:37:47 BST 1999


Hi Malliks,

You may find it more helpful to post this kind of question to:

  http://www.mulberrytech.com/xsl/xsl-list

where there are a number of people to help.  I happen to have some time in
a lunch break to post an answer here.

At 99/07/12 09:32 -0700, Mallikarjuna Sangappa wrote:
>There are elements with the same attributes. So when
>I'm writing the stylesheet, I have to repeat the code
>for the two elements. 
...
<!ENTITY % ENT_CITY "CITY_VALUE
(Chicago|SanFrancisco|NewYork|Detroit) #IMPLIED">
...
>So in the stylesheet, I'll have to repeat the code
>for both CITY and METROS, like

Fortunately, you are using the same attribute name for both element types,
so you are really close ... just put what you have into a named template
and call the template each time you process each element type.

>  <!--City-->  
>  <xsl:param-variable name="varcity" expr = "CITY"/>

There is no need to use a parameterized variable here ... a regular
variable is fine since you don't need to pass a parameter.  BTW, your
attribute name is "CITY_VALUE" not "CITY".

I've attached a sample below (simplified without the use of an external
function).

I hope this helps.

............... Ken


T:\malliks>type test.xml
<?xml version="1.0"?>
<!--
<!ENTITY % ENT_CITY "CITY_VALUE
(Chicago|SanFrancisco|NewYork|Detroit) #IMPLIED">

<!ELEMENT CITY EMPTY>
<!ATTLIST CITY %ENT_CITY;>

<!ELEMENT METROS EMPTY>
<!ATTLIST METROS %ENT_CITY;>
-->
<test>
  <METROS CITY_VALUE="SanFrancisco"/>
  <CITY CITY_VALUE="NewYork"/>
</test>

T:\malliks>type test.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">

<xsl:template match="CITY">
  <xsl:call-template name="city"/>
</xsl:template>

<xsl:template match="METROS">
  <xsl:call-template name="city"/>
</xsl:template>

<xsl:template name="city">
  <!--City-->  
  <xsl:variable name="varcity" expr = "@CITY_VALUE"/>

    <xsl:choose> 
	
	   <xsl:when test="$varcity='Chicago'">
		   <xsl:text>C</xsl:text>
       </xsl:when>

	   <xsl:when test="$varcity='SanFrancisco'">
		   <xsl:text>S</xsl:text>
	   </xsl:when>

	   <xsl:when test="$varcity='NewYork'">
		   <xsl:text>N</xsl:text>
	   </xsl:when>

	   <xsl:when test="$varcity='Detroit'">
		   <xsl:text>D</xsl:text>
	   </xsl:when>

   </xsl:choose>
</xsl:template>

</xsl:stylesheet>
T:\malliks>call xsl test.xml test.xsl test.txt
T:\malliks>type test.txt

  S
  N

T:\malliks>


--
G. Ken Holman                    mailto:gkholman at CraneSoftwrights.com
Crane Softwrights Ltd.             http://www.CraneSoftwrights.com/x/
Box 266, Kars, Ontario CANADA K0A-2E0   +1(613)489-0999   (Fax:-0995)
Website:  XSL/XML/DSSSL/SGML services, training, libraries, products.
Publications:   Introduction to XSLT (3rd Edition) ISBN 1-894049-00-4
Next instructor-led training:   MS'99 1999-08-16  MT'99 1999-12-05/06


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list