2009-10-26 1 views
1

Chaque fois que j'appelle xml.setNamespace(ns), l'espace de noms de l'élément est défini sur ns, mais ns est également ajouté en tant qu'un autre espace de noms avec son propre préfixe à l'élément. Je voudrais savoir comment arrêter ce dernier (je suis d'accord avec la modification XML.prototype.function::setNamespace) sans définir @xmlns car je ne peux pas utiliser la syntaxe E4X. Alternativement, un XML.prototype.function::setAttribute qui n'utilise pas la syntaxe E4X @attribute (sauf bien sûr pour l'utilisation de function:: pour le définir) serait encore mieux.Ne pas ajouter un espace de nom lors de l'utilisation de xml.setNamespace()

Exemple:

var xhtml = new Namespace("http://www.w3.org/1999/xhtml"), 
xml = <foo/>; 
xml.setNamespace(xhtml); 

// what I get: 
xml.toXMLString() === 
    <foo 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" 
    />.toXMLString(); 

// what I want: 
xml.toXMLString() === 
    <foo 
    xmlns="http://www.w3.org/1999/xhtml" 
    />.toXMLString(); 

Répondre

0

Je suis contente juste de <xhtml:my-root xmlns:xhtml="...">...</xhtml:my-root> donc je vais juste en tenir à l'aide d'un espace de noms nommé (new Namespace(name, nsURI)).

0

Je ne connais pas la réponse, mais je courais votre code dans Rhino 1.7r2, et retourné des résultats différents. Soit cela dépend de l'implémentation, soit une de nos implémentations E4X est buggée. Dont pas quoi.

sur Rhino 1.7r2: problème

var xhtml = new Namespace("http://www.w3.org/1999/xhtml"), 
xml = <foo/>; 
xml.setNamespace(xhtml); 

js> xml.toXMLString() 
<e4x_0:foo xmlns:e4x_0="http://www.w3.org/1999/xhtml"/> 

semble que vous ayez exécuté dans les anciennes « préfixes d'espaces de noms sont censés être insignifiants, mais dans le monde réel, ils sont en fait significatif ». :(

+0

Rhino semble traiter 'setNamespace' comme' addNamespace', qui ISN Ne pas avoir un nom d'espace de nom (juste un uri). –

Questions connexes