2011-09-27 1 views
0

J'ai un fichier XML qui contient un champ du type:analyse XML pour imprimer une chaîne avec les attributs de formatage par mot

<mytext><![CDATA[ My name is <color value="FF0000">Bill</color>. ]]></mytext> 

Depuis que je suis nouveau à des méthodes E4X, je me demande s'il est un simple méthodologie (en utilisant des méthodes E4X) afin d'imprimer le texte interne: "Mon nom est Bill." dans une zone de texte et ayant le mot "Bill" coloré, c'est-à-dire rouge.

La situation généralisée est, si je peux imprimer le texte interne et utiliser des balises XML pour spécifier les attributs de mise en forme du texte par mot.

Est-ce que E4X supporte ce type d'analyse, ou dois-je programmer mon propre "petit" analyseur pour cette situation?

Répondre

0

D'abord, normalisent le contenu html (j'ai ajouté un tag <content> pour la rendre valide):

var mytext:XML = XML("<mytext><![CDATA[<content>My name is <color value="FF0000">Bill</color>.</content>]]></mytext>"); 

étape suivante consiste à analyser le document XML donné:

var roughXML:XML = XML(mytext.text().toString()); 

Ensuite, vous devez remplacer vos balises personnalisées par des balises standard:

var output:XML = XML("<span/>"); 
for each(var tag:XML in roughXML.children()) 
{ 
    if (tag.name() == "color") 
    {  
     var fontTag:XML = XML("<font/>"); 
     [email protected] = [email protected](); 
     fontTag.appendChild(tag.text()); 
     output.appendChild(fontTag); 
    } 
    //you can add here any rule for substitution that you need 
    else 
    { 
     output.appendChild(tag); 
    } 
} 

Enfin, vous pouvez utiliser un s:RicheEditableText pour afficher votre texte

var textFlow:TextFlow = TextConverter.importToFlow(output.toXMLString(), TextConverter.TEXT_FIELD_HTML_FORMAT); 
myRichEditableText.textFlow = textFlow; 
+0

Wow !! Je pense (je suis encore en train de l'étudier ..) c'est ce dont j'ai besoin! Juste un petit ajout: après la clause ** if avec tag.name(), après le var fontTag ... je pense qu'il doit être entré dans fontTag.appendChild (tag.text())? droite? –

+0

vous avez parfaitement raison, je suis content que vous l'ayez :) – Kodiak

+0

Juste un commentaire de plus, parce que je ne sais pas encore (je vais l'étudier) la classe TextConverter: Quand je change le 2ème argument importToFlow() méthode à ** TEXT_FIELD_HTML_FORMAT ** Je viens d'obtenir le texte sans couleur, et quand je mets la constante que vous fournissez, je reçois seulement le hors-tag-tag-texte: "Ceci est". Y a-t-il un problème avec la façon dont je spécifie la couleur? –