xsl-list
[Top] [All Lists]

RE: Root when the current node is part of Parameter Result Tree Fragement/Nodelist

2004-03-09 16:12:02
The problem is that - within the context of the ParamColour matching 
template, the key object doesn't seem to be defined - in fact, even root of 

Actually, I believe the key is defined, it just doesn't match anything in the 
current document. When you call apply-templates on your parameter node you are 
changing the current document to that of the parameter.

this context node ( i.e. <xsl:copy-of select="//" /> is only the Parameter 
contents. This makes me very sad.

Is there a keyword or expression I can use to get the originally processed 
document while I am in the context of a node from an RTREEFRAG or external 
parameter nodeset ?

You could save the root node in a global variable.
<xsl:variable name="docRoot" select="/"/>

Another solution would be to change your template match and apply-templates to 
something like this:

<xsl:template match="Object">
    <xsl:copy-of select="."/>
    <xsl:apply-templates select="Colour"/>
</xsl:template>

<xsl:template match="Colour">
    <xsl:if test=".=$OtherExpr/ParamColour">
         Is the same colour!
    </xsl:if>
</xsl:template>

Josh

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of 
Colin Toal
Sent: Tuesday, March 09, 2004 1:45 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Root when the current node is part of Parameter Result
Tree Fragement/Nodelist


Hi all,

I hope I'm not breaking etiquette, but I could not find an answer to this in 
the FAQ or archives.

I have an XML source document like this:

<Objects>
   <Object>
       <Name>Toothbrush</Name>
       <Type>Electric</Type>
       <Colour>White</Type>
   </Object>
   <Object>
      <Name>Soap Dish</Name>
      <Type>Plastic</Type>
      <Colour>Blue</Colour>
   <Object>
</Objects>

I process it with a stylesheet like this:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.1">
<xsl:key name="kObject" match="Object" use="Name"/>
<xsl:param name="ObjectName" />
<xsl:param name="OtherExpr" />

<xsl:template match="/Objects">
   <FoundObject>
       <xsl:apply-templates select="key('kObject', $ObjectName/Name)"/>
   </FoundObject>
</xsl:template>

<xsl:template match="Object">
    <xsl:copy-of select="."/>
    <xsl:apply-templates select="$OtherExpr/ParamColour"/>
</xsl:template>

<xsl:template match="ParamColour">
    <xsl:if test="current() = key('kObject', $ObjectName/Name)/Colour">
         Is the same colour!
    </xsl:if>
</xsl:template>

I process the XML document with this Stylesheet using SAXON 7.8 in Java, and 
I pass a DOMSource object into each of the parameters that looks like the 
following:

For ObjectName Param
<Name>Toothbrush</Name>

For Other Expr Param:
<ParamColour>White</ParamColour>

The problem is that - within the context of the ParamColour matching 
template, the key object doesn't seem to be defined - in fact, even root of 
this context node ( i.e. <xsl:copy-of select="//" /> is only the Parameter 
contents. This makes me very sad.

Is there a keyword or expression I can use to get the originally processed 
document while I am in the context of a node from an RTREEFRAG or external 
parameter nodeset ?

Thanks in advance for your help,
Colin Toal

_________________________________________________________________
MSN Premium with Virus Guard and Firewall* from McAfee® Security : 2 months 
FREE*   
http://join.msn.com/?pgmarket=en-ca&page=byoa/prem&xAPID=1994&DI=1034&SU=http://hotmail.com/enca&HL=Market_MSNIS_Taglines


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


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