10
votes

Comment puis-je empêcher JQuery d'insérer l'attribut 'XMLNS' dans un objet XML?

J'utilise le nouveau $. parsexml () méthode avec jQuery 1.5. Chaque fois que j'insère un nouvel élément dans l'objet XML, ce nouvel élément obtient automatiquement l'attribut «XMLNS» avec la valeur «http://www.w3.org/1999/xhtml». Par exemple, voir l'extrait de code ci-dessous: xxx

Le code crée l'élément suivant: xxx

Comment puis-je empêcher jQuery d'insérer le Attribut 'XMLNS'? J'ai essayé d'utiliser la méthode .removeattr () , mais même cela semble fonctionner. Des idées?

mise à jour: La suggestion que l'utilisateur nrabinowitz a offert a été utile pour résoudre ce problème. L'ajout d'un attribut XLMNS à l'élément de niveau supérieur empêche l'attribut XLMNS d'être attribué automatiquement à chaque nouvel élément. Néanmoins, j'ai opté pour une autre solution pour mon programme particulier. J'ai plutôt utilisé la méthode .replace () pour supprimer tous les attributs XLMNS après après que j'ai converti l'objet XML dans une chaîne (à afficher sur une page Web).


2 commentaires

Avez-vous essayé d'ajouter votre propre attribut XMLNS à l'élément racine? Je soupçonne qu'en l'absence d'espace de noms explicite, JQuery par défaut à XHTML.


Je ne pense pas que JQuery lui-même fait une analyse XML du tout. Au lieu de cela, cela permet au navigateur le faire. (Si JQuery avait un analyseur XML complet intégré, il serait encore plus énorme :-) Edit Yup a vérifié la source - il suffit de répondre à votre XML à une instance "Domparser".


4 Réponses :


5
votes

Essayez d'utiliser

$(myXml).find('three').append('<five>some value</five>');


2 commentaires

a travaillé pour moi aussi, mais l'affaire était ajoutée ' a donné l'élément comme vous le souhaitez


Travaillé parfaitement en chrome, mais dans IE 11, rien n'a été ajouté. Testez-le: jsfiddle.net/eygqwwgt/2 Avez-vous un indice pourquoi?



0
votes

Vous devez faire comme ceci:

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>";

myXml = $.parseXML(myXml);

var el=xmlDoc.createElement("yourElement");

$(myXml).find('three').append($(el));


1 commentaires

Votre solution donne toujours à l'espace de noms dans la balise "Yourelement". Voir at: jsfiddle.net/lzfg7zpv



4
votes

Que se passe-t-il, c'est que le nœud que vous insérez a une autre propriété NAMESPACEURI.

nœud dérivé de $ .parsexml p> xxx pré>

Votre nœud créé p>

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>";
myXml = $.parseXML(myXml);
$(myXml).find('three').append($('<five>some value</five>', myXml));


0 commentaires

0
votes

Utilisez ce code qui fonctionne en chrome également dans IE

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>";
myXml = $.parseXML(myXml);
$(myXml).find('three').append($('',$.parseXML('<five>some value</five>')));


1 commentaires

S'il vous plaît ajouter un peu de contexte à votre réponse.