2011-09-27 72 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:“这是”。我如何指定颜色有问题吗? –