Форум 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=126506)

vvvvvvf 20.06.2009 23:57

XML как убрать вывод самого тега
 
Доброго времени суток.
Работаю с данными XML и столкнулся с такой проблемой
например есть такой код XML (подгружаю с сервера)

Код:

<?xml version="1.0"?>
<response>
        <userListName>Добро пожаловать <b>Вася</b>!</userListName>
</response>

Как теперь вывести все содержимое в тегах userListName?

Пробовал такие спсобы:

Код AS3:

//... Код загрузки с сервера опустил
                        vars = new XML(myLoader.data);
                        trace('userListName1:'+vars.child('userListName'));
                        trace('userListName2:'+vars.userListName);
                        trace('userListName3:'+vars.userListName.toString());
                        trace('userListName4:'+vars.userListName.text());

Первый, второй и третий способ выводит "<userListName>Добро пожаловать <b>Вася</b>!</userListName>", то есть вместе с тегоми <userListName> и </userListName>

а четвертый "<userListName>Добро пожаловать !</userListName>", то есть без содержимого в тегах b, то есть <b>Вася</b>.


Вопрос: Как можно вывсести содержимое в тегах userListName без самих тегов, то есть такой вариант "Добро пожаловать <b>Вася</b>!"?

silin 21.06.2009 00:27

можно из vars.userListName.* собирать нужную строку
а лучше в CDATA упаковать это хозяйство
Код AS3:

<response>
        <userListName><![CDATA[Добро пожаловать <b>Вася</b>!]]></userListName>
</response>;


vvvvvvf 21.06.2009 00:34

а без CDATA как то можно?

ramshteks 21.06.2009 00:35

ну как вариант, возможно плохой... пользоваться XMLDocument

silin 21.06.2009 01:09

>>а без CDATA как то можно?

Код AS3:

trace( vars.userListName.* );


vvvvvvf 21.06.2009 03:24

А есть какой-нибудь универсальный код который прогоняет через цикл все переменные и заменяет их на полные строки то есть что вроде этого "vars.userListName = vars.userListName.*"


Пробовал сделать так, но что-то не получается =((
Код AS3:

                        for (var i:int = 0; i < vars.*.length(); i++) {
                                vars.*[i] = vars.*[i].*;
                        }

Что-то я там видимо не так делаю, потому что после прогона через цикл переменная vars.userListName стает пустой

silin 21.06.2009 14:04

можно персобрать в другой xml
Код AS3:

var xml:XML =<response/>
for (var i:int = 0; i < vars.*.length(); i++)
{
        var str:String = vars.*[i].*;
        var node:XML = <node/>;
        node.userListName = str;
        xml.appendChild(node);
}

но все равно криво, что-то надо делать с потерей пробелов, лишними (или не лишними) переводами строк и т.д.
проще сразу обернуть в cdata
Код AS3:

var str:String =  myLoader.data;
str = str.replace(/<userListName>/g, "<userListName><![CDATA[");
str = str.replace(/<\/userListName>/g, "]]></userListName>");
vars = new XML(str);


wvxvw 21.06.2009 14:58

Код AS3:

var xml:XML =
<response>
        <userListName>Добро пожаловать <b>Вася  </b></userListName>
        <foo>Добро                    пожаловать <b>Вася</b></foo>
        <bar>Добро пожаловать <b>        Вася</b></bar>
</response>;
xml.*.(setChildren(XML("<![CDATA[" +
                children().toXMLString().replace(/(\r|\n|\t|(\s\s+))+/g, " ") +
                "]]>")));
 
trace(xml.toXMLString());


vvvvvvf 23.06.2009 17:49

Огромное спасибо заработало так как я и хотел =))


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

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