Re: [xsl] Namespace prefixes in Schemas

Subject: Re: [xsl] Namespace prefixes in Schemas
From: "António Mota" <amsmota@xxxxxxxxx>
Date: Wed, 16 Aug 2006 11:45:16 +0100
I just tested this in Mozzila, where the problem described occurs. I
did forget to test it in IE (!), i just tested it now but it doesn4t
work at all, it doesen4t even load my xml file, but i thinks that's a
Sarissa related problem...

I'll try your sugestion on Mozilla and get back to you...

Thanks again.

2006/8/16, Abel Online <abel.online@xxxxxxxxx>:
Hi Antsnio,

See my intermissions,

Cheers,
Abel Braaksma
http://www.nuntia.nl

Antsnio Mota wrote:

> Are you sure of that? Are you sayng that the target, not the prefix,
> is cheked by the processor?
>
> But nevertheless i lied about my actual problem, (gee, i'm watching
> too much "House") cause i was afraid that the moderator will come by
> saying this is not a XSL question... But i'll risk it anyway...
>
> My problem is that i'm using Sarissa to get some Schema nodes using
> XPath, like this
>
> var nodes = xmlSchema.selectNodes("//xs:element");

This should be right, yes.

>
> after declaring
>
> Sarissa.setXpathNamespaces(xmlSchema,
> 'xmlns:xs="http://www.w3.org/2001/XMLSchema";');

This should be right too. But I'm afraid it will work with TransformIIX
(Gecko based browsers use it) and not with MSXML. I had about the same
problem a while, but I wasn't using Sarissa (but I am planning on using
it).

> > It seems that this is about the same situation you've pointed in your > answer, but that is not working, afaict it only works if the Schema > has > > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";> > > but not if it's > > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";>

It should work for both with any "normal" processor. But since you are
using Sarissa, I expect you to use the XSLT as a client-side
transformation in JavaScript. This changes the original question a bit,
because there are a lot of incompatibilities between client side XSLT
processors. Here's a copy of my function that does what you want. Put in
a DOM element and a tagname. The tagname can be of the form "xs:element"
or otherwise. It will replace the prefix for Gecko based browsers. There
are other ways to do this, but this is a working version (and your post
reminds me of adding some error handling in the function below). .

getElementsByTagName = function(dom, tagname) {
    if(typeof dom.selectNodes != 'undefined') {
        return dom.selectNodes("//" + tagname);
    } else {
        tagname = tagname.replace(/[^:]+:(.*)/, "$1");
        return dom.getElementsByTagName(tagname);
    }
}

Please note that, if your DOM object is obtained using AJAX technology
outside the domain, you may need to request UniversalBrowserRead
privileges for Gecko. In that case add the following to the "else" part
(for IE, you must add the site to the trusted domains):

       try{typeof netscape!='undefined' &&
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
       } catch (e) {alert("Not allowed by user!" + e.message); return }

Afaik, this should do the trick. Hmm, thinking. You should try this with
a DOM object that is not expanded by Sarissa. Try it without Sarissa
first.Then add this code in a way to Sarissa, so that it works for the
Sarissa method "selectNodes".


> > > Anyhow i'm going to try this in a XSLT "per se", not in Sarissa, to > see if it works (the moderator...) and if it works i'll check with the > guys at Sarissa (if Manos don4t answer to this post first). > > Thanks for your answer, it didn't solve my problem but it pointed me > to right direction, i think... > > Good luck with it, hth,

Abel Braaksma
http://www.nuntia.nl

Current Thread