Разбор XML для печати строки с атрибутами форматирования для слова - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть XML, который содержит поле типа:

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

Поскольку я новичок в методах E4X, мне интересно, существует ли простая методология (использующая методы E4X) для печати внутреннего текста: «Меня зовут Билл». в текстовой области, где слово «Билл» окрашено, то есть в красный цвет.

Обобщенная ситуация, если я могу напечатать внутренний текст и использовать теги XML для указания атрибутов форматирования текста для каждого слова.

Поддерживает ли E4X этот тип синтаксического анализа, или я должен запрограммировать свой собственный "маленький" парсер для этой ситуации?

1 Ответ

0 голосов
/ 27 сентября 2011

Во-первых, давайте нормализуем содержание 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/>");
        fontTag.@color = tag.@value.toString();
        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;
...