Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перенос строки в xml (http://www.flasher.ru/forum/showthread.php?t=215391)

Godwarlock 06.04.2018 22:45

Перенос строки в xml
 
Всем привет. Подскажите, как правильно вставить в строку xml тег переноса строки. Пробовал такой вариант
Цитата:

<txt_test>Какой-то там текст\nТекст с другой строки</txt_test>
Но выводит сплошным "Какой-то там текст\nТекст с другой строки" без переноса с тегом \n

СлаваRa 07.04.2018 00:16

"Но выводит" кто?

caseyryan 07.04.2018 10:46

Ты наверное через trace() пробовал вывести?
Выведи в текстовое поле

Godwarlock 07.04.2018 11:33

caseyryan Вывод в текстовое поле. Игнорируется тег \n.

Код AS3:

txt_out.text = Lang.getText(step.text);
 
public static function getText(text:String):String
{
        var result:String = ui[text]//ui = XMLList;
        return result;
}

Добавлено через 16 минут
UPD: Текстфилд старлинговский 2.2

caseyryan 07.04.2018 12:47

ты покажи весь код, а не эти куски. Не понятно что у тебя там вообще происходит

что такое step?
передай туда текст не их xml а просто строку с переносом, и посмотри перенест или нет

Godwarlock 07.04.2018 12:58

caseyryan
Цитата:

передай туда текст не их xml а просто строку с переносом, и посмотри перенест или нет
Просто текст переносит, из xml, не переносит.
Цитата:

что такое step?
step это класс, в этом классе параметр text:String, который содержит указатель в xml txt_test
<txt_test>Какой-то там текст\nТекст с другой строки</txt_test>
Код AS3:

Lang.getText(step.text);

Возвращает содержание указателя txt_test в String, то есть
Цитата:

Какой-то там текст\nТекст с другой строки
Но в текстовом поле напрямую так и выводит Какой-то там текст\nТекст с другой строки. И в трейсе точно также выводит без переноса. Не могу понять.
Что сделать так
Код AS3:

var str:String = "Какой-то там текст\nТекст с другой строки";
trace(str);

Тип string, всё нормально переносит, как положено.
Получаю строку из xml
Код AS3:

var result:String = ui.txt_test//ui = XMLList;
trace(result);

Тот же тип, тот же текст. Трейс выводит без переноса, сплошными текстом.
При всём при этом, даже html тэги нормально обрабатываются.
То есть если в xml вставить <txt_test>&lt;font color="#25f56a"&gt;Какой-то там текст\nТекст с другой строки&lt;/font&gt;</txt_test>
То выведет красным цветом весь текст. Но \n так и остается.
Еще раз отмечу и в trace, и в текстовом поле результат аналогичный.
Я естественно придумал обходной путь. Но всё же интересно в чем косяк.

Wolsh 07.04.2018 17:21

Какой-то там текст\u000AТекст с другой строки

Godwarlock 07.04.2018 20:35

Wolsh Не сработало. Также в сплошную вбивает.

Wolsh 07.04.2018 21:25

Вложений: 1
Странно..

Вложение 33214

Godwarlock 07.04.2018 21:29

Wolsh тут обращение к XML. А у меня к XMLList
Код AS3:

private var ui:XMLList;
 
var lang_ru:XML = Assets.config.getXML("lang-ru");
ui = lang_ru.ui;
var result:String = ui.txt_test;
trace(result);


Wolsh 07.04.2018 21:37

Вложений: 1
Да без разницы. XMLList содержит ссылки на объекты XML.

Вложение 33215

Godwarlock 07.04.2018 22:10

Вложений: 1
Понятия не имею в чем проблема. Не работает и всё.
Так и пишется
Какой-то там текст\u000AТекст с другой строки
Что в трейсе, что текстифилде. xml загружается через bulkloader

caseyryan 08.04.2018 18:50

Сделай минимальный работающий пример, и выложи сюда.
Наверняка у тебя какая-то пробелма в коде.

Godwarlock 08.04.2018 21:23

Вложений: 1
Ну вот пример.

in4core 08.04.2018 22:09

[cdata] <br> на кройняк

Wolsh 08.04.2018 22:17

Цитата:

Ну вот пример.
TestText.rar: The archive is either in unknown format or damaged

Godwarlock 08.04.2018 22:25

Вложений: 1
Wolsh у меня нормально скачалось и открылось. В 7zip запаковал

Wolsh 08.04.2018 22:47

Чето у меня все-равно не открывается, но это не суть важно, ибо мой пример тоже не работает при загрузке XML извне через URLLoader. Всмысле, тоже не переносит.

undefined 09.04.2018 09:40

А если использовать вместо /n другой символ и после загрузки подменять его на /n?

caseyryan 09.04.2018 10:02

В качестве догадки могу предположить, что при конвертации текста в XML делается экранирование спецсимволов, чтобы этот \n попал в текст как есть. Тобишь на выходе получается не \n, а \\n, но трейсится, естественно, как простой \n
Попробуй в коде, который читает текст, сделать так:
Код AS3:

text = text.replace("\\n", "\n");

И посмотри, перенесет ли
Цитата:

Сообщение от Wolsh (Сообщение 1204874)
TestText.rar: The archive is either in unknown format or damaged

Та же хрень

ZergMaster 09.04.2018 12:39

А можно сделать соувсем уж извращение. Добавить в xml строку какой-нибудь левый разделитель, вместо \n, например #. И потом, при постановке в текстовое поле делать что-то вроде

Код AS3:

textField.text = makeWordWrap(xmlText);
 
function makeWordWrap(xmlText:String, delim:String='#'):String
{
    var result:String = '';
    xmlText.split(delim).forEach(function (item:String. i:int, arr:Array)
      {
              var newLine:String = i ? '\n' : '';
              result += newLine+item;
      });
 
    return result;
}


undefined 09.04.2018 12:49

Цитата:

Сообщение от caseyryan (Сообщение 1204879)
В качестве догадки могу предположить, что при конвертации текста в XML делается экранирование спецсимволов, чтобы этот \n попал в текст как есть. Тобишь на выходе получается не \n, а \\n, но трейсится, естественно, как простой \n

Как я понял засада что если грузить данные извне,то перенос не засчитывается, а при хардкоде строки ручками все ок.

caseyryan 09.04.2018 12:52

Цитата:

Сообщение от undefined (Сообщение 1204883)
Как я понял засада что если грузить данные извне,то перенос не засчитывается, а при хардкоде строки ручками все ок.

Потому что срабатывает штатный XML парсер, и добавляет экраны ко всем спецсимволам

in4core 09.04.2018 12:55

Да сделайте сдата в конце концов! Что за детский сад

Wolsh 09.04.2018 13:16

Цитата:

и добавляет экраны ко всем спецсимволам
всё сложнее: ни replace(), ни indexOf() вообще не находят "\n" в строке.

Добавлено через 18 минут
upd: indexOf() находит "\\n"

undefined 09.04.2018 13:43

так кто его подставляет то URLLoader или XML?

caseyryan 09.04.2018 13:46

Цитата:

Сообщение от Wolsh (Сообщение 1204887)
всё сложнее: ни replace(), ни indexOf() вообще не находят "\n" в строке.

Добавлено через 18 минут
upd: indexOf() находит "\\n"

А если попробовать через юникод? \u000d

Wolsh 09.04.2018 13:49

Цитата:

так кто его подставляет то URLLoader или XML?
URLLoader.
Еще до преобразования data в XML индексОф() находит \\n вместо \n.

Godwarlock 09.04.2018 13:55

in4core cdata слишком много лишнего мусора в тексте.
Тут всё же прозвучало решение, которое я использовал до всей этой дилемы с загрузкой через loader) Самый простой вариант, это просто вставить символ, который в тексте никогда не будет использоваться и просто подменять его.
Код AS3:

public static function getText(text:String):String
                {
                        var str:String = ui[text];
                        var result:String = "";
                        for (var i:int = 0; i < str.length;i++ )
                        {
                                var char:String = str.charAt(i);
                                if (char == "$")
                                {
                                        var replaced:String = char.replace("$", "\n");
                                        result += replaced;
                                }else
                                {
                                        result += char;
                                }
                        }
                        return result;
                }


caseyryan 09.04.2018 13:57

попробуй так:
Код AS3:

text = text.replace(/\\\n/gi, "\n");

Самому сейчас никак не проверить

Цитата:

Сообщение от Godwarlock (Сообщение 1204892)
in4core cdata слишком много лишнего мусора в тексте.
Тут всё же прозвучало решение, которое я использовал до всей этой дилемы с загрузкой через loader) Самый простой вариант, это просто вставить символ, который в тексте никогда не будет использоваться и просто подменять его.
Код AS3:

public static function getText(text:String):String
                {
                        var str:String = ui[text];
                        var result:String = "";
                        for (var i:int = 0; i < str.length;i++ )
                        {
                                var char:String = str.charAt(i);
                                if (char == "$")
                                {
                                        var replaced:String = char.replace("$", "\n");
                                        result += replaced;
                                }else
                                {
                                        result += char;
                                }
                        }
                        return result;
                }


Жесть) Лучше замени этот г-код на регулярку:
Код AS3:

public static function getText(text:String):String {
    return ui[text].replace(/\$/gi, "\n");
}



Часовой пояс GMT +4, время: 01:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.