Subject: RE: xsl:variable and position question and experience
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Mon, 3 Mar 2003 12:12:13 -0500
|
This message, and several others posted today, are __NOT__ from me, even
though my name is in the From: header.
The are actually from
ds5j@xxxxxxxxxx
and I would appreciate it if this individual would correct his/her
postings.
Tom P [the real Tom Passin]
> -----Original Message-----
> From: Passin, Tom [mailto:ds5j@xxxxxxxxxx]
> Sent: Monday, March 03, 2003 11:02 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: xsl:variable and position question and experience
>
>
>
>
> Hi,
> Extending on Jenny Tennison example of using document
> example to compare file elements I ran into some interesting
> behavior regarding variables as I tried to compare elements
> in the same position in 2 files.
>
> Please see the examples and questions below
>
> Example XML Files:
>
> File Containing references to other Files
> <files>
> <file href="file1.xml" />
> <file href="file2.xml" />
> </files>
>
> file1.xml :
> <file>
> <Products>
> <Product name="1"/>
> <Product name="2"/>
> <Product name="3"/>
> </Products>
> </file>
>
> file2.xml :
> <file>
> <Products>
> <Product name="1"/>
> <Product name="20"/>
> <Product name="3"/>
> </Products>
> </file>
>
> In the stylesheet the following global variables are declared:
> <xsl:variable name="file1"
> select="document(/files/file[1]/@href, /)" />
> <xsl:variable name="file2"
> select="document(/files/file[2]/@href, /)" />
>
> Later inside template matches or for-each loops I try to
> use these variables to compare elements by position(product
> elements). I am unable to do a value-of on them.
>
> Example:
> 1) Inside a template match on *, or $file1//Product the
> following strangeness occurs:
>
> <xsl:value-of select="$file1//Product[1]/@name" />
> prints the name of the product
> but <xsl:value-of select="$file1//Product[2]/@name"/>
> does not print anything.
>
> It seems test clauses are able to access the values in the
> variables but value-of can't.
> Example:
> 2) Inside a similar template or foreach
>
> The following test is true when the second product in
> file2 is different. It seems the test in the match is true
> although the Product[1] in both files are the same. It is
> somehow matching the second products in the 2 files. Even so
> if I try to print the second product name attribute it does not work.
>
> <xsl:when test="$file1//Product[1]/@name !=
> $file2//Product[1]/@name">
> CHANGE DETECTED
> <xsl:if test="$file2//Product[1]/@name='20'">20</xsl:if>
> <!-- the test can access the second files second product-->
> <xsl:value-of select="$file2//Product[2]/@name" />
> <!-- the value of prints nothing proving it cannot
> access the second file's second product-->
> </xsl:when>
>
>
> If Product[1] is somehow iterating through the Product
> nodes that is cool. But why can't I access the value of
> attributes in a value-of statement when xsl:when or xsl:if
> test clauses can?
>
>
> xsl:value of can access elements by position if the variable
> points to the specific element in the file
> Example:
> 3) If a variable pointing to the product node is
> created then it is possible to access the Product attributes
> using positions. It seems positions only work on the element
> stored in the variable and not on subelements of elements in
> a variable
>
> The following works:
> <xsl:variable name="product1"
> select="document(/files/file[2]/@href, /)//Product" />
> <xsl:value-of select="$product1[2]//@name" />
> <!-- the second product in file can be accessed this way-->
>
> but I don't understand why. It is in convenient to have
> to create many variables for a file to access each element
> that needs to be accessed by position.
>
>
> If you can explain why these things work the way they do
> please let me know or if are these idiosyncrasies are bugs?
>
> Also I have tried this in xalan and saxon and get the
> same behavior, so I assume this is not a bug but a lack of
> understanding on my part.
>
> thanks
>
> DS
>
>
>
>
>
> _______________________________________________
> Join Excite! - http://www.excite.com
> The most personalized portal on the Web!
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|