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