[
Lists Home |
Date Index |
Thread Index
]
Tor Helland wrote:
>>We see definitively that if there is no prefix in the name used in a
>>step, then the null namespace is assigned, not the default namespace.
>>That's why expressions like request/title do not return anything when
>>those elements are in a non-null default namespace.
>
>
> So, just to see if I get this right: A default namespace like this:
> <?xml version="1.0" encoding="UTF-8"?>
> <test xmlns="test">
> <container-abc>
> ...
> </container-abc>
> </test>
>
> leaves the container-abc element only reachable by some non-abbreviated
> syntax like:
> //*[name()="container-abc"]
>
That would be local-name(), but it would work. If there could be
elements of the same local name in different namespaces, you would have
to test for the desired namespace as well. However, the usual thing one
does is to declare a prefix for the namespace *in the stylesheet*, and
then use that prefix in the xpath expressions.
> but here:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <test xmlns="test" xmlns:t="test">
> <container-abc>
> ...
> </container-abc>
> </test>
>
> I would get results with
> //t:container-abc
>
> Is that right?
>
Not quite. As mentioned above, the namespace prefix that counts is the
one declared in the stylesheet, not the one declared in the source
document. In fact, the stylesheet processor will generally be unaware
of what prefix was used in the source document, because the parsing of
the source document does not have to keep the information about specific
prefixes - of course, it does have to keep information about the
namespaces themselves. Now if the source and stylesheet were rolled
into one (in other words, using an "embedded" stylesheet), then yes,
that would work.
Remember, BTW, that unprefixed attributes are always in no namespace,
not in the default namespace, so you always get them without any prefix.
Cheers,
Tom P
--
Thomas B. Passin
Explorer's Guide to the Semantic Web (Manning Books)
http://www.manning.com/catalog/view.php?book=passin
|