PDA

Просмотр полной версии : XML как убрать вывод самого тега


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


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


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

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


//... Код загрузки с сервера опустил
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 упаковать это хозяйство
<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 как то можно?

trace( vars.userListName.* );

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


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

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


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

silin
21.06.2009, 14:04
можно персобрать в другой xml
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
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
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
Огромное спасибо заработало так как я и хотел =))