[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: question about import/include

Subject: RE: question about import/include
From: "Craig Kattner" <CKattner@xxxxxxxxxxxxxx>
Date: Fri, 4 Apr 2003 11:02:58 -0600
msxml import
Just tried it in saxon 6.5.2 from the command line, and in both cases it results in (which is, again, not what I expected):
<p class="categoryBody">This is a test.
This is only a test.d</p>


-----Original Message-----
From: Craig Kattner 
Sent: Friday, April 04, 2003 10:51 AM
To: XSL List (E-mail)
Subject:  question about import/include


I have the following stylesheet with a named template called "convert_linefeeds" which converts CRLF's to new paragraphs of html. It works fine when the named template is part of the stylesheet. However, I want to reuse it in other places but when using import/include the template doesn't work.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" />

<xsl:template match="/">
	<xsl:call-template name="convert_linefeeds">
		<xsl:with-param name="input" select="//desc" />
	</xsl:call-template>
</xsl:template>

<!-- Adapted from XSLT Cookbook, First Editiion by Sal Mangano page 13 -->
<xsl:template name="convert_linefeeds">
	<xsl:param name="input" />
	
	<xsl:choose>
		<!-- see if the input contains the search string -->
		<xsl:when test="contains($input, '&#13;&#10;')">
			<!-- if so, then contatenate the substring before the search string
				 to the replacement string and to the result of recursively applying
				 this template to the remaining substring -->
			<p class="categoryBody">
				<xsl:value-of select="substring-before($input, '&#13;&#10;')" />a
			</p>
			<xsl:call-template name="convert_linefeeds">
				<xsl:with-param name="input" select="substring-after($input, '&#13;&#10;')" />
			</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<!-- no more occurences of the search string so, just return the current input string -->
			<p class="categoryBody">
				<xsl:value-of select="$input" />b
			</p>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

</xsl:stylesheet>


This is a sample document that it works with.

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<desc>This is a test.
	This is only a test.</desc>
</root>


The result (which is what I expect):
<p class="categoryBody">This is a test.a</p>
<p class="categoryBody">This is only a test.b</p>

That works fine. But, I want to use the convert_linefeeds template in several other templates, so I break it out into a separate file:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" />

<!-- Adapted from XSLT Cookbook, First Editiion by Sal Mangano page 13 -->
<xsl:template name="convert_linefeeds">
	<xsl:param name="input" />
	
	<xsl:choose>
		<!-- see if the input contains the search string -->
		<xsl:when test="contains($input, '&#13;&#10;')">
			<!-- if so, then contatenate the substring before the search string
				 to the replacement string and to the result of recursively applying
				 this template to the remaining substring -->
			<p class="categoryBody">
				<xsl:value-of select="substring-before($input, '&#13;&#10;')" />c
			</p>
			<xsl:call-template name="convert_linefeeds">
				<xsl:with-param name="input" select="substring-after($input, '&#13;&#10;')" />
			</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<!-- no more occurences of the search string so, just return the current input string -->
			<p class="categoryBody">
				<xsl:value-of select="$input" />d
			</p>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

</xsl:stylesheet>


And include it in a new stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="convert_linefeeds.xsl" />
<xsl:output method="html" encoding="UTF-8" />

<xsl:template match="/">
	<xsl:call-template name="convert_linefeeds">
		<xsl:with-param name="input" select="//desc" />
	</xsl:call-template>
</xsl:template>

</xsl:stylesheet>


Results in (missing </p><p> tags):
<p class="categoryBody">This is a test.
This is only a test.d</p>


It doesn't error out, but the output isn't wrapped in <p></p> as I expect. Using MSXML 4.0 for this. (Incidentally, it does appear to work using a PI in the browser, but not from ASP or the msxsl command line. That would seem to indicate an MSXML problem I think.)

Craig

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.