xsl-list
[Top] [All Lists]

Re: [xsl] with or without namespace

2010-11-16 13:14:52
On 11/16/2010 11:33 AM, ac wrote:
Hi,

I have a xslt2 stylesheet that transforms to (x)html, an XML document
type that comes in two flavors, both with the same "local-name"
elements, but with or without namespace.

For example, either:

... xmlns:xx="aaa.cc">
<xx:a>
<xx:b>bla</xx:b>
</xx:a>
...

or

...>
<a>
<b>bla</b>
</a>
...

To process these elements irrespective of their namespace, I can use
expressions like
*[local-name(.) = "a"] and *[local-name(.) = "b"]
all through the stylesheet but, in the stylesheet, I would much rather
map everything to the same namespace (possibly to default- or
no-namespace) and either use a single prefix, or better still, no
prefix, all over the stylesheet, to refer to all or any of these
elements.
/xx:a, /xx:b, or /a , /b, for example
What would be the best way to declare the stylesheet namespaces to
achieve this, if possible?

Thank you,
ac


If you are using XSLT 2.0, you can declare a default namespace to be
used in XPath expressions; but that would not help, because you would
then be unable to address elements that are in no namespace.

I think your best bet is to declare a short prefix (like xx, as you
said) for the namespace, and then whenever you need to match "a", use
"a|xx:a". There may be some situations where that's awkward or
impossible, though...

Another alternative would be to add a preliminary transformation that
strips namespaces on all elements. Then you can feed the result of that
transformation to a stylesheet that can assume the input elements have
no namespace.
The preliminary transformation can be implemented as a separate
stylesheet, or if you have XSLT 2.0 or exslt:node-set(), it can be part
of the same stylesheet.

Lars

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--