Subject: RE: [xsl] document() function and error-handling From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 3 Jan 2008 17:04:52 -0000 |
You're right, this question is specific to the processor. XSLT 1.0 makes it implementation-defined what happens when you ask for a non-existent document, and there's no mechanism in the standard for testing whether the document exists or for recovering if it doesn't. XSLT 2.0 has a doc-available() function for this purpose. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Scott Trenda [mailto:Scott.Trenda@xxxxxxxx] > Sent: 03 January 2008 16:49 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] document() function and error-handling > > Quick question, might be specific to the MSXML XSLT processor. > > I'm trying to reference two different files passed in as > parameters to a transformation using the document() function. > If the files are blank or valid URIs (the URI handling is > correct), the transformation works as expected, but if the > URI points to a non-existant file, MSXML errors out with code > 0x800c0006: "The system cannot locate the object specified." > I'm developing a central framework for several different > applications, and I don't know if the application is actually > going to create the file I'm trying to reference here. If it > doesn't exist, I don't care, I just want to use it in the > case that it does exist. > > I've played around with some different scenarios in the > stylesheet, and the error occurs any time I try to access the > variable that contains the result of the document() function, > even if I only want to check if it's non-empty. Is there any > more graceful way (for MSXML, in particular) to handle the > case where the URI passed to document() doesn't exist? > > I've included the stylesheet I'm using at the bottom, just in > case it helps. > > ~ Scott > > > > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/ > " exclude-result-prefixes="encodingStyle"> > > <xsl:param name="framework-map-file"/> > <xsl:param name="app-map-file" /> > > <xsl:output method="text" encoding="utf-8"/> > > <xsl:variable name="framework-maps" > select="document($framework-map-file)"/> > <xsl:variable name="app-maps" > select="document($app-map-file )"/> > <xsl:variable name="maps" > select="$framework-maps/*/map | $app-maps/*/map"/> > > <xsl:template match="*"> > <xsl:variable name="var-name"> > <xsl:apply-templates > select="." mode="name"/> > </xsl:variable> > <xsl:for-each > select="$maps[normalize-space(@new) = $var-name]"> > <xsl:value-of > select="concat('<webSet #', normalize-space(@old), '# = > #', $var-name, '#> ')"/> > </xsl:for-each> > <xsl:apply-templates select="*"/> > </xsl:template> > > <xsl:template match="*" mode="name"> > <xsl:apply-templates > select="parent::*" mode="name"/> > <xsl:choose> > <xsl:when > test="../@encodingStyle:arrayType">[<xsl:number/>]</xsl:when> > <xsl:otherwise> > <xsl:if > test="parent::*">.</xsl:if> > <xsl:value-of > select="name()"/> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] document() function and error, Scott Trenda | Thread | RE: [xsl] document() function and e, Scott Trenda |
Re: [xsl] Conditional in-context no, David Carlisle | Date | Re: [xsl] document() function and e, Robert Koberg |
Month |