Subject: RE: Basic question about Namespace handling in XPath 1.0 (not necessarily related to XSLT)
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 28 Sep 2005 16:24:22 +0100
|
See the method setNamespaceContext() method on the interface
javax.xml.xpath.XPath.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Prakash [mailto:prakash.subramaniam@xxxxxxxxxx]
> Sent: 28 September 2005 15:12
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: Basic question about Namespace handling in
> XPath 1.0 (not necessarily related to XSLT)
>
> Thanks Geert.
>
> My question is not in relation to XSLT. I was talking about the
> namespace prefix resolution in general for XPath. For
> example, in Java,
> JAXP 1.3 has some APIs to process XPath given a context (
> likewise DOM
> Level 3 has some APIs). These APIs are application
> independent. I guess,
> the namespace mappings available in scope to the context node will be
> the deciding factor, right?. Pls, correct me if I am wrong.
>
> Thanks,
> Prakash
>
> Geert Josten wrote:
>
> > Hi,
> >
> > The answer should be pretty clear, it all depends on how
> you declare
> > the namespaces in your XSL stylesheet... :)
> >
> >> 1. If we have a XPath like "//sup:name", how will the
> XPath processor
> >> know which "sup:name" will have to be returned? (considering that
> >> there are two sup:name elements that are in two different
> namespaces.
> >
> >
> > <xsl:value-of select="//sup:name"
> xmlns:sup="http://www.suppliers.com"
> > /> will result in the first one.
> >
> > <xsl:value-of select="//sup:name"
> > xmlns:sup="http://www.anothersuppliers.com" /> will result in the
> > second one.
> >
> > You will probably choose to assing prefix sup1 to the first
> namespace
> > and sup2 to the second. If you want both, you can then
> simply specify
> > //sup1:name|//sup2:name (or //*:name in XSLT 2.0 altogether)
> >
> >> 2. Similarly, if we have a XPath such as "//order", which "order"
> >> will be considered considering that there are two order
> elements both
> >> in default namespace (first order element is actually in null
> >> namespace whereas the second one in default namespace
> declared in the
> >> root element)
> >
> >
> > Likewise. I expect that //order results in the first when you don't
> > specify a default namespace, and in the second if you use
> > xmlns="http://www.customers.com".
> >
> > It is adviced not to use default namespaces in XSL
> stylesheets, though.
> >
> > Cheers,
> > Geert
|