2010-11-25 25 views
2

J'essaie de supprimer les guillemets des nœuds de texte. Le code suivant fonctionne:Bonne façon de remplacer le texte dans l'élément E4X

var cars = <cars> 
      <buick> 
       <color> 
        "Blue" 
       </color> 
      </buick> 
      <chevy> 
       <color> 
        "Red" 
       </color> 
      </chevy> 
      </cars>; 

for each (elem in cars) 
    for each (item in elem.*) 
     elem[item.localName()] = item.text().toString().replace(/"/g,''); 

Cependant, je ne me sens pas à l'aise sur le élém [item.localName()] = construction. semblent

item = item.text().toString().replace(/"/g,''); 

Malheureusement, ce code ne pas faire ce qu'il est censé faire: En effet, je l'ai déjà une pointe au point du texte et il serait beaucoup plus logique d'utiliser quelque chose comme. Des idées pourquoi? Quelle est la bonne façon de le faire?

Répondre

1

Où exécutez-vous ce code? Parce que ça marche bien pour moi dans Firefox.

Et est ce (essayer et laissez-moi savoir si cela a fonctionné pour vous):

for each (txt in cars..*.text()){ 
    txt.parent().setChildren(txt.toString().replace(/"/g,'')); 
} 
+0

Je suis en cours d'exécution dans le code YQL (Open Tableau de données élément). Votre code fonctionne mais en fait je me demandais s'il y avait un moyen de changer le texte dans un nœud sans avoir à se référer au parent (c'est ce que je fais maintenant, elem [item.localName()]) – mtelis

+0

@mtelis Hmm .. 'txt.nodeValue = ...' devrait fonctionner, mais ce n'est pas le cas. Dans tous les cas, pourquoi voulez-vous éviter de faire référence à l'élément parent? – Zecc

+0

Il est à noter qu'il peut y avoir plusieurs nœuds de texte différents sous le même élément, et vous devriez probablement appeler 'normalize()' sur chacun d'eux juste pour être du bon côté. Exemple: J'ai juste ajouté un commentaire au milieu du texte et mon code s'est cassé, donc c'est encore moins robuste que votre code original. – Zecc

1

Essayez ceci, s'il vous plaît:

for each (var color in cars.*.*) 
    color.* = color.toString().replace(/"/g,''); 
+1

Vous devriez ajouter quelques explications à vos réponses. –