Subject: Re: [xsl] XSLT 1.0 Namespace Help From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Mon, 25 Aug 2014 17:36:28 -0000 |
Hi Bridger, Please don't do this: On Mon, Aug 25, 2014 at 10:36 AM, Bridger Dyson-Smith bdysonsmith@xxxxxxxxx wrote: > <xsl:for-each > select="$queryDoc/*[local-name()='sparql']/*[local-name()='results']/*[local-name()='result']/*[local-name()='collection']/@uri"> Instead of asking for them by name, you are effectively asking the processor to look at all your elements, testing each of them by comparing (part of) its name to a literal value. There are several reasons why this is not as good an idea as it may seem. If you really wish to select elements irrespective of namespace, this is better: (A) select="$queryDoc/*:sparql/*:results/*:result]/*:collection/@uri" or perhaps (B) select="$queryDoc//*:collection/@uri" or maybe (C) select="$queryDoc//collection/@uri" xpath-default-namespace="http://www.w3.org/2001/sw/DataAccess/rf1/result" (referring to the namespace of the element in the source data) or (D) select="$queryDoc//rf1:collection/@uri" xmlns:rf1="http://www.w3.org/2001/sw/DataAccess/rf1/result" or (C) or (D), except with the declaration of a prefix for the namespace, or the instruction to the XSLT engine to default to it, promoted onto an ancestor element such as the xsl:stylesheet element. There are a number of reasons to avoid the cumbersome *[local-name()=$name] approach to finding elements. Among other things, it is asking the machine how to do something (find elements by their names) that it has already been programmed to do. This means, for example, it is apt to be significantly slower in execution than doing it the "right" way (using XPath name tests, not filters). It is like going to the cheese shop, and telling the cheese man how to tell the difference between Stilton and Double Gloucester. He already knows the difference, and only needs you to tell him which cheese you want. So (in general), ask for things by name, so //*:collection if you *really* don't know the namespace. If you do know the namespace, use it. > and now it's working. Yes but only sort of! > Apologies for the noise. Please don't apologize for asking questions on topic! (You have presented an extremely common solecism in XSLT.) Cheers, Wendell -- Wendell Piez | http://www.wendellpiez.com XML | XSLT | electronic publishing Eat Your Vegetables _____oo_________o_o___ooooo____ooooooo_^
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSLT 1.0 Namespace Help, Bridger Dyson-Smith | Thread | Re: [xsl] XSLT 1.0 Namespace Help, Bridger Dyson-Smith |
Re: [xsl] XSLT 1.0 Namespace Help, Bridger Dyson-Smith | Date | Re: [xsl] XSLT 1.0 Namespace Help, Bridger Dyson-Smith |
Month |