Могу ли я просто использовать e4x или мне также нужно регулярное выражение?

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

<?xml version="1.0" encoding="UTF-8"?>
<instructions id="detection" version="1.0">
<instruction task="detection">
    <phrase type="header">HAS THE CARD TURNED OVER?<nl/><nl/><nl/></phrase>
    <phrase type="practice">you are now going to do a practice.<nl/><nl/></phrase>
    <phrase type="real">You are now going to do a test.<nl/><nl/></phrase>
    <phrase>As soon as the card turns face up:<nl/><nl/></phrase>
    <phrase><ts/><ts/>Press YES.<nl/><nl/></phrase>
    <phrase>Go as fast as you can and try not to make any mistakes.<nl/><nl/></phrase>
    <phrase>If you press YES before a card turns face up, you will hear an error sound.</phrase>
</instruction>
</instructions>

Теперь все, что мне нужно сделать, это следующее

  1. Заменить все <nl/> на \ n
  2. Заменить все <ts/> на \ t
  3. Условно выберите практику или реальную, возможно, удалив другую
  4. Удалите все оставшиеся биты XML, чтобы получить строку.

так что, допустим, мне нужна практическая версия этого, я должен получить

HAS THE CARD TURNED OVER?\n\n\n
you are now going to do a practice.\n\n
As soon as the card turns face up:\n\n
\t\tPress YES.\n\n
Go as fast as you can and try not to make any mistakes.\n\n
If you press YES before a card turns face up, you will hear an error sound.

Теперь у меня есть возможность изменить структуру XML, если текущая форма не идеальна для этого, но в чем я не уверен, так это в том, смогу ли я сделать все вышеперечисленное с помощью e4X или мне также нужно использовать регулярные выражения? Некоторые примеры были бы замечательными.


person Dale Fraser    schedule 25.07.2012    source источник
comment
Вам действительно нужно \ n, или будет работать визуальный перерыв, например, то, что вы получаете с помощью тегов ‹br›?   -  person Amy Blankenship    schedule 25.07.2012
comment
Он переходит в текстовое поле, которое в настоящее время использует жестко закодированный текст с \ n \ t, и мы перемещаем его в систему конфигурации xml.   -  person Dale Fraser    schedule 25.07.2012
comment
Тогда я бы использовал ‹br /› вместо того, чтобы пытаться заменить на \ n. Я думаю, вы можете просто использовать вкладки там, где вам нужны вкладки. На этом этапе вам просто нужно вызвать toString () для XMLList, содержащего ваши реальные или практические значения. Если вы не установите condenseWhite в TextArea, вам могут даже не понадобиться теги ‹br /›, но, вероятно, можно просто отформатировать текст, поместив символы возврата каретки в нужное место.   -  person Amy Blankenship    schedule 25.07.2012
comment
Я не понимаю. E4X предназначен только для управления XML, выбора, добавления, удаления элементов, но не для изменения его содержимого. Для этого вам, очевидно, потребуется использовать метод replace или регулярное выражение, если вы предпочитаете и в конечном итоге повлияете на новое значение.   -  person poussma    schedule 25.07.2012


Ответы (1)


Это можно сделать с помощью E4X, вероятно, не так элегантно, как регулярное выражение. Вот пример замены <nl> на "\ n" с помощью E4x:

package
{
    import flash.display.Sprite;

    public class e4xStuff extends Sprite
    {
        private var srcxml:XML;

        public function e4xStuff()
        {
            srcxml = new XML(   '<instructions id="detection" version="1.0">' +
                '<instruction task="detection">' +
                '<phrase type="header">HAS THE CARD TURNED OVER?<nl/><nl/><nl/></phrase>' +
                '<phrase type="practice">you are now going to do a practice.<nl/><nl/></phrase>' +
                '<phrase type="real">You are now going to do a test.<nl/><nl/></phrase>' +
                '<phrase>As soon as the card turns face up:<nl/><nl/></phrase>' +
                '<phrase><ts/><ts/>Press YES.<nl/><nl/></phrase>' +
                '<phrase>Go as fast as you can and try not to make any mistakes.<nl/><nl/></phrase>' +
                '<phrase>If you press YES before a card turns face up, you will hear an error sound.</phrase>' +
                '</instruction>' +
                '</instructions>');


            processNode(srcxml);
            trace(srcxml);
        }

        private function processNode(xml:XML):XML
        {
            //replace <nl/> with \n
            if(xml.name() == "nl")
            {
                return new XML("\n");
            }

            var children:XMLList = xml.children();
            if(children.length() == 0)
            {
                return xml;
            }

            //remove the children
            xml.setChildren(new XMLList());   

            //put the children back, one-by-one, after checking for <nl/>
            for(var i:int=0; i<children.length(); i++)
            {
                xml.appendChild(processNode(children[i])); 
            }
            return xml;
        }
    }
}

Список методов E4X размещен по адресу http://wso2.org/project/mashup/0.2/docs/e4xquickstart.html Вы можете проверить на практике или реально, используя xml. @ Type

person duggulous    schedule 25.07.2012