Subjects
Home
Xalan extension functions
Fomatting question serializing DOM with pretty print
xalan with pull parser
Cannot find the declaration
Apache Xalan drop support to run on JRE 1 1 x
Why does Doctype change processing of a document
Node set to XML string via Java extensions in Xalan J: possible?
Templates/Transformers + thread safety???
Problem evaluating xpath with muliple prefix with different namespace
remove an arbitrary attribute from xsl output
Xalan3 XSLT 2 0 XPath 2 0 support?
Problem using compiled translets with Xalan !!
Xalan and jstl 1 1 problem with transform tag
NullPointer in DOM2DTM getLocalName
URIResolvers base parameter with xsltc and cascaded imports
Performance problem for Xalan J on intel dual core
Standard libraries in JAXP?
Serializing a DOM tree to XML file, customize entities replacement
Library Conflict Involving BCEL Library
A question on how users are using <xsl:message >
Kevin Cormier as a new Apache Xalan J committer
Struggling to iterate over tokenized string
Xalan count() trouble
Problem with recursive xpath
Error when switching to java 1 5
document( ' ')
Problem with Xalan2 7 0 transformation
cr/lf options
entity encoded XML
can xalan transform 2 xml using one xslt?
Xalan J JIRA defect review Monday October 16, 2006 from 2:00 to 3:30 pm ED
xsl transform with cdata section elements
xslt parameters not expanded
Weird behavior of XPath evaluate()
How to avoid <xsl:message > instruction prints stylesheet file informations ?
Cannot find SimpleTransform subdirectory after installing Xalan J
recover from document not found exceptions
jdk1 5 and Xalan jar differences?
Performance Issue
Error/Bug adding floating point numbers
XPathAPI: eval exp using nodes with default namespace
modifying xalan to output invalid XML
NullPointerException
mege two separate xml nodes into one
Is this a XALAN document identification bug?
is StylesheetRoot really java io Serializable ?
transform() fails for DOMSource but succeeds for StreamSource
Thoughts on Transformer parameter passing
HELP, Xalan and jstl 1 1 problem with transformer
Problem with XPath namespace axis?
string utils:replace deleting search string if replacement string is an HTML
help with enumeration values pls
xalan 2 5 1 vs 2 7 performance question
How to insert/update in XML document
HTML Serialization and Handling of Ampersands in HREF Attributes
XHTML link tag stripping
SystemId Unknown; Line #24; Column #49; java lang NullPointerException
xpath text() help
Apostrophe problem with xalan 2 7 0
How to set variables in XML document?
Links
Home
Oracle database error code ...
 
Search:  
Power your search with and, or, +, -, or "some phrase" operators.
Re: Unable to see source document after using for-each on a converted
    node-se

Re: Unable to see source document after using for-each on a converted
    node-se

2003-02-07       - By David N Bertoni/Cambridge/IBM





Hi Pete,

I believe Xalan-J is correct.  I tried your stylesheet with Saxon and
Xalan-C and got the same result as you get with Xalan-J.

When you use exslt:node-set to turn a result tree fragment into a node-set,
you're essentially converting it into another document.  As a result,
within the xsl:for-each instruction, the nodes you're iterating over are in
that document, so "/" refers to the converted node-set.

The usual trick is to save the original root in a variable, so you have
access to it within the xsl:for-each instruction:

 <xsl:template match="root">
   <out>
     <!-- process the specific nodes defined in the variable -->
     <xsl:variable name="source" select="/"/>
     <xsl:for-each select="exslt:node-set($tree)/test">
       <xsl:variable name="tag" select="."/>
       <results group="{$tag}">
         <xsl:for-each select="$source/root/*[name() = $tag]">
           <xsl:copy-of select="."/>
         </xsl:for-each>
       </results>
     </xsl:for-each>
   </out>
 </xsl:template>

I suspect libxslt is using the source document as a factory for result tree
fragments, which would give the result you expect without saving the
context.  However, this is not correct:

  http://www.w3.org/TR/xslt#section-Result-Tree-Fragments

  "A result tree fragment is treated equivalently to a node-set that
  contains just a single root node."

Hope that helps...

Dave



                                                                             
                                                           
                     "Edwards, Peter"                                        
                                                           
                     <Peter.Edwards@(protected)         To:      xalan-j-users@(protected)
.apache.org                                                    
                     zeneca.com>                  cc:      (bcc: David N
Bertoni/Cambridge/IBM)                                            
                                                  Subject: Unable to see
source document after using for-each on a converted  node-set    
                     02/07/2003 03:02 AM                                      
                                                           
                                                                             
                                                           



I have a simple document:
 <?xml version="1.0" encoding="UTF-8"?>
 <root>
   <name>Test</name>
   <description>D1</description>
   <number>42</number>
   <description>D2</description>
 </root>

And a stylesheet that groups certain elements together:
 <?xml version="1.0"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:exslt="http://exslt.org/common"
                 extension-element-prefixes="exslt"
                 exclude-result-prefixes="exslt"
                 version="1.0">
   <xsl:output method="xml" indent="yes"/>
   <xsl:variable name="tree">
     <test>name</test>
     <test>description</test>
   </xsl:variable>
   <xsl:template match="root">
     <out>
       <!-- process the specific nodes defined in the variable -->
       <xsl:for-each select="exslt:node-set($tree)/test">
         <xsl:variable name="tag" select="."/>
         <results group="{$tag}">
           <xsl:for-each select="/root/*[name() = $tag]">
             <xsl:copy-of select="."/>
          </xsl:for-each>
       </results>
     </xsl:for-each>
   </out>
 </xsl:template>
</xsl:stylesheet>

The expected output is:
<?xml version="1.0"?>
<out>
 <results group="name">
   <name>Test</name>
 </results>
 <results group="description">
   <description>D1</description>
   <description>D2</description>
 </results>
</out>

In the case of Xalan (v2.4.1 with JDK1.4.1) the output is:
<?xml version="1.0" encoding="UTF-8"?>
<out>
 <results group="name"/>
 <results group="description"/>
</out>

I ran the same stylesheet with XSLTProc and got the output I expected. It
is
as though the Xalan processor cannot see the root element when it is
operating within a for-each clause walking a converted nodeset. Does anyone
know if this is a know fault or is it behaving according to spec and my
expectations were wrong. Obviously there are better ways of grouping things
and I have changed the whole stylesheet but suspect I have found a problem.

Pete Edwards