Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: doesn't make sense #2..could you?

From: Peter Flynn <peter.nosp@-.--------.-->
To: NULL
Date: 10/13/2007 9:51:00 PM

TJ wrote:
> Hi,
> 
> I am trying to understand the difference ....xsl...hum..
> 
> This is A.xsl
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> version="1.0">
>   <xsl:template match="/hello-world/greeting">
>     <div><xsl:value-of select="."/></div>
>   </xsl:template>
> </xsl:stylesheet>
> 
> This is B.xsl
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> version="1.0">
>   <xsl:template match="/hello-world">
>     <div><xsl:value-of select="greeting/text()"/></div>
>   </xsl:template>
> </xsl:stylesheet>
> 
> I tested these two xsl with this xml.
> 
> This is A.xml
> <?xml version="1.0"?>
> <?xml-stylesheet type="text/xsl" href="A.xsl"?>
> <hello-world>
>    <greeting>Hello, World!</greeting>
>    <greeter>An XSLT Programmer</greeter>
> </hello-world>
> 
> This is B.XML
> <?xml version="1.0"?>
> <?xml-stylesheet type="text/xsl" href="B.xsl"?>
> <hello-world>
>    <greeting>Hello, World!</greeting>
>    <greeter>An XSLT Programmer</greeter>
> </hello-world>
> 
> It produce different results in IE7.
> A.XML output
>    Hello, World!
>    An XSLT Programmer
> 
> B.XML output
>    Hello, World!
> 
> It looks to me that two xsl should produce 
> same output.....hum...
> Can anybody explain this?

In XSL, if there is no template matching an element type, it will be 
assumed to equate to an "apply-templates" directive. Here, there is no 
template matching the document root ("/"), so it will proceed to look 
for a template matching the root element type (in your example, 
"hello-world").

In A.xsl, there is no template matching "hello-world", so using the same 
default rule, it will be assumed to equate to an "apply-templates" 
directive and will walk down the tree to the first subelement, 
"greeting", where it will test and apply the same rule, and find that a 
template for this element type *does* exist, and it says to add the 
string value (".") of any text or elements below this point. (In fact 
this template doesn't need to be quite so specific in its match, just 
"greeting" would have done; the effect of the value-of for "." means 
that if there had been any further nested subelements inside greeting, 
they would have been stripped of their markup and the whole content of 
greeting concatenated and output as a simple string). Having exhausted 
depth, the processor moves sideways to the next sibling element type, 
"greeter". There is no template to match this, so as there are no nested 
subelements, the text content of greeter is added to the output tree.

However, in B.xsl, there *is* a match for the root element. It doesn't 
need to be quite so explicit, just "hello-world" would have done, 
without the slash. In this case, the template says to add the value of 
all the text in the "greeting" subelement to the output tree, which it 
does. This template does not specify any further processing, so as there 
is nothing left to look at, the processing stops here. The greeting 
element and the greeter element, will never *themselves* get processed 
as such, either explicitly (looking for a matching template) NOR 
implicitly (using the default template) because while the current 
context was "hello-world", a template *was* found (whereas in A.xsl it 
was not), and once a template matches, no further 
searching-for-templates occurs *for that element*: only what is 
specifies in the matching template will get done, nothing more. And in 
this case, as the element in question was the root element (of which 
only one can exist), that's all, folks.

///Peter
-- 
XML FAQ: http://xml.silmaril.ie/


transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent