Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   \n строки из XML (http://www.flasher.ru/forum/showthread.php?t=182649)

FriOne 30.07.2012 13:49

\n строки из XML
 
Когда беру строку из XML'ки, то перестает работать \n в текстовом поле,
подскажите как решить эту проблему.

Wolsh 30.07.2012 14:00

CDATA и xhtml-тег <br/>

FriOne 30.07.2012 14:25

"и" или "или"?
Не могу найти в инете нормального мануала.
Что с этим делать, например, я делаю так:
Код:

<group name="descrition"><![CDATA[Организатор:\nМежрегиональная общественная организация содействия архитектурному образованию.]]></group>
Беру стороку методом toString, не работает, мб в этом дело? Или я впринципи делаю не то?

strangedk 30.07.2012 14:41

PHP код:

<group name="descrition"><![CDATA[Организатор:<br/>Межрегиональная общественная организация содействия архитектурному образованию.]]></group


FriOne 30.07.2012 14:48

Так пробовал, он не делает перенос строки, а просто оставляет <br/>

strangedk 30.07.2012 14:57

http://www.flasher.ru/forum/showthread.php?t=134837

Wolsh 30.07.2012 14:58

Ну так не text, а htmlText надо устанавливать текстфилду)

FriOne 30.07.2012 15:03

И правда text поменял в методе смены языка.)
Но с htmlText вообще не выводится теперь.

strangedk 30.07.2012 15:09

Я и не указывал на разбивку текста. Далее же в теме указано решение, и так должно работать:

Код AS3:

<xml><![CDATA[
тестирую<br>тестирую<br>тестирую
]]></xml>

Код AS3:

var t = xmlData.firstChild.nodeValue();
txt.htmlText = t;
txt.html = true;


FriOne 30.07.2012 15:13

Вообще-то код ас2, но все равно спасибо)

Wolsh 30.07.2012 15:14

У меня все выводится и переносится, и никакие теги в видимом тексте не остаются:
Код AS3:

var xml:XML = <group name="descrition"><![CDATA[Организатор:<br/>Межрегиональная общественная организация содействия архитектурному образованию.]]></group>;
var txt:TextField = new TextField();
addChild(txt);
txt.multiline = true;
txt.width = 1000;
txt.htmlText = xml.toString(); // лучше xml.text();

Если минимальный пример работает, ищите ошибку в другом месте.

strangedk 30.07.2012 15:48

Цитата:

Сообщение от FriOne (Сообщение 1090250)
Вообще-то код ас2, но все равно спасибо)

Не обратил внимание, извиняюсь. Но суть содержания XML остается той же.

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

fish_r 30.07.2012 15:56

Возможно больше "ко двору" ignoreWhitespace

strangedk 30.07.2012 16:04

Цитата:

Сообщение от fish_r (Сообщение 1090260)
Возможно больше "ко двору" ignoreWhitespace

А чем поможет?

fish_r 30.07.2012 19:49

А кстати говоря да - ерунда получается... Тогда можно исопльзовать \\&#xD; ( без косых только, они сейчас просто экранируют символ переноса строки ).

iNils 31.07.2012 00:01

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

str = str.replace(/\\n/g, '\n')


dimarik 31.07.2012 00:32

Как просто. Вроде "\\" — это экранирование бэк-слеша. Но то в языке программирования Си

CDATA интерпретируется "как есть". В нем достаточно организовать LF, CR или CR/LF. Т.е. не прописывать "\n" в явном виде. Иначе оно интерпретируется как два отдельных символа "\" и "n".

Wolsh 31.07.2012 00:47

Ага. Это из разряда "пишем в местах перевода строки звездочки - *, потом в рантайме делаем сплит и джойн с заменой звездочек на перенос \n".
Да просто не надо пользоваться в XML и в других внешних данных этой системой. Совершенно верно сказано, что в контексте plain text это просто два символа.
Если текст требует форматирования, надо пользоваться форматированием, html или TLF Markup. А игры с заменой экранчиков рано или поздно сыграют злую шутку.

fish_r 31.07.2012 11:04

Цитата:

Сообщение от iNils (Сообщение 1090319)
Я в шоке, что никто не дал ответа на такой банальный вопрос, который довольно часто задавали на форуме.
Когда мы пишем \n в коде, то при компиляции получаем один символ переноса строки. При загрузки из внешнего источника, этого не происходит и мы имеем два символа \ и n.
Всего то нужно заменить экранированный обратный слеш и n, на \n.
Код AS3:

str = str.replace(/\\n/g, '\n')


В смысле "правильность" заключается в том, чтобы сначала расставлять по тексту знаки "\n", а потом самому же парсить текст чтобы заменить их экранированные варианты?

Моё решение лучше.

FriOne 31.07.2012 11:38

Как раз нашел эту тему http://www.flasher.ru/forum/showthread.php?t=90892
Но за реплейс спасибо, блин давно пора разобраться в регулярных выражениях..
Чтобы заменить \\n и \\t одним реплейсом же никак?

strangedk 31.07.2012 12:22

Цитата:

Сообщение от iNils (Сообщение 1090319)
Я в шоке, что никто не дал ответа на такой банальный вопрос, который довольно часто задавали на форуме.
Когда мы пишем \n в коде, то при компиляции получаем один символ переноса строки. При загрузки из внешнего источника, этого не происходит и мы имеем два символа \ и n.
Всего то нужно заменить экранированный обратный слеш и n, на \n.
Код AS3:

str = str.replace(/\\n/g, '\n')


А чем <br> не угодил-то ?

iNils 31.07.2012 14:12

Цитата:

Сообщение от fish_r (Сообщение 1090348)
В смысле "правильность" заключается в том, чтобы сначала расставлять по тексту знаки "\n", а потом самому же парсить текст чтобы заменить их экранированные варианты?

Моё решение лучше.

Цитата:

Сообщение от strangedk (Сообщение 1090353)
А чем <br> не угодил-то ?

Какое решение? Кто не угодил? Вы вопрос читали? Вопрос был про не работающий \n. Никто не ответил.
А лучше как написал Димарик. Там вообще ничего делать не надо и создавать легко.

fish_r 31.07.2012 15:07

Цитата:

Сообщение от iNils (Сообщение 1090370)
Какое решение? Кто не угодил? Вы вопрос читали? Вопрос был про не работающий \n. Никто не ответил.
А лучше как написал Димарик. Там вообще ничего делать не надо и создавать легко.

Читали, что касается меня. Если автор, как и пишет, сам ставит \n, то лучше сразу ставить \\&#xD;, и дальше никакая обработка не нужна. По тому, что написал Димарик будут траблы - два перевода, если документ был создан в Windows, например...
Вообще, выбор эффективного решения зависит ещё и от того каким образом формируется хмл... Но <br /> точно на последнем месте, ибо костыль.

Wolsh 31.07.2012 15:40

Цитата:

Вообще, выбор эффективного решения зависит ещё и от того каким образом формируется хмл...
Да нет же. Выбор простой — если это выводимый текст и предполагается форматирование, его надо форматировать. Сейчас нужен просто перевод строки? Завтра захочется выделить болдом или цветом, и будете переписывать не только xml, а делать вывод в текстфилд так, как положено тексту с форматированием, а не "техническому" тексту на кнопке, например.
Цитата:

Но <br /> точно на последнем месте, ибо костыль.
Без комментариев...

iNils 31.07.2012 15:49

Ставить &#xD; точно не лучше.
Хуже читается, чем \n.
Лучше как написал Димарик. Даже, если винда и нет возможности выбрать какой вариант EOL использовать, то тот же replace свободно приведет \r\n к \n. Да, одна строчка кода будет. Но это не страшно, зато любой текст можно быстро редактировать, без вставок абракадабры &#xD;, особенно, если забивать будет девочка, которая это не понимает. И ошибок будет меньше, а с &#xD; они будут, особенно при редактировании.
Если же в админке есть постобработка добавленного текста, то разницы все равно не будет, что там будет меняться &#xD; или же \n. Но при отладке \n более читабельная.
Ну и последние момент, если все же для вывода текста будет использовать text, а не htmlText, то \n будет работать, а &#xD; нет.

fish_r 31.07.2012 16:11

Цитата:

Сообщение от iNils (Сообщение 1090408)
Ну и последние момент, если все же для вывода текста будет использовать text, а не htmlText, то \n будет работать, а
нет.

Нет. Наоборот, в text это и работает ( не в CDATA).

Добавлено через 5 минут
Цитата:

Сообщение от Wolsh (Сообщение 1090405)
Да нет же. Выбор простой — если это выводимый текст и предполагается форматирование, его надо форматировать. Сейчас нужен просто перевод строки? Завтра захочется выделить болдом или цветом, и будете переписывать не только xml, а делать вывод в текстфилд так, как положено тексту с форматированием, а не "техническому" тексту на кнопке, например.
Без комментариев...

Мы же не знаем конкретики, правда? Автору может и не нужно никакого форматирования, а понадобится так может ему CSS будет удобнее. #htmlText наверняка медленнее работает, а может у него миллион текстовых полей или ситуация вроде того. Зачем за него решать как ему работать с TextField-ом? Есть простая задача:
как передать перенос строки в тексте. Её и надо решать. Так ведь?

iNils 31.07.2012 16:33

Цитата:

Сообщение от fish_r (Сообщение 1090409)
Нет. Наоборот, в text это и работает ( не в CDATA)

&#xD; не может работать в текстовом поле через свойство text - это ведь HTML-сущность
Вот специально проверил - не работает.

Wolsh 31.07.2012 17:06

Цитата:

Мы же не знаем конкретики, правда?
Именно незнание конкретики и предполагает ответ, работающий в любых условиях.
Парадокс как раз в том, что весь консилиум сейчас обсуждает совершенно конкретную ситуацию "просто текст", и при этом никак не может прийти к согласию, какими костылями исправлять какие баги; что будет работать при таких-то условиях, что не будет; и как объяснить "девочке" (а я бы сказал — заодно и адмике), какие странные закорючки надо ставить и как правильно сохранять.
А хтмл просто работает и всё.

fish_r 31.07.2012 18:32

Вложений: 1
Цитата:

Сообщение от iNils (Сообщение 1090415)
не может работать в текстовом поле через свойство text - это ведь HTML-сущность
Вот специально проверил - не работает.

Синтаксис - да, но в списке сущностей не нашел http://www.w3.org/TR/html4/sgml/entities.html. И, таки, работает, тоже проверил. Вот, во вложении пример.

iNils 31.07.2012 19:12

Внутри cdata не работает.


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

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