2011-09-27 108 views
0

我有一個包含類型的字段中的XML:解析XML每個字與格式屬性打印字符串

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

由於我是新來的E4X方法,我不知道是否有一個簡單的方法論(使用E4X方法)以打印內部文本:「我的名字是比爾。」在文本區域中並且使詞語「Bill」變爲紅色。

一般情況是,如果我可以打印內部文本並使用XML標記來指定每個單詞的文本格式屬性。

E4X支持這種類型的解析,還是我必須爲這種情況編程自己的「小」解析器?

回答

0

首先,讓我們正常化的HTML內容(我加了<content>標籤,使之有效):

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

下一步是解析給定的XML:

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

然後,你必須用標準標籤代替您的自定義標籤:

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); 
    } 
} 

最後,您可以使用s:RicheEditableText顯示您的文字

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

哇!我想(我還在研究它..)這就是我需要的!只是一點點補充:在** if子句**之後加上tag.name(),在var fontTag之後...我認爲它必須被輸入fontTag.appendChild(tag.text())?對? –

+0

你完全正確(編輯),我很高興你得到它:) – Kodiak

+0

只是一個更多的評論,因爲我還不知道(我要研究它)TextConverter類:當我改變第二個參數importToFlow ()方法** TEXT_FIELD_HTML_FORMAT **我只是得到沒有顏色的文本,當我把你提供的常量,我只得到了out-of-color-tag-text:「這是」。我如何指定顏色有問題嗎? –