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

Division 07.05.2009 18:21

XML, существует ли узел
 
Как проверить, существует ли заданный узел в XML?
К примеру, есть XML
Код:

<?xml version="1.0" encoding="utf-8" ?>
<data>
<error>
  <title>Ошибка пользователя</title>
  <msg>Возможные причины: Кривые руки</msg>
</error>
</data>

Так вот, как узнать, существует ли узел error в таком XML(сейчас, понятное дело, существует, но его может и не быть)?

И ещё вопрос, как в xml узнать имя корневого узла?(в нашей ситуации это data)
В поиске был, мука читал, не нашёл.

BlooDHounD 07.05.2009 18:36

а как узнать имя не корневого узла?

etc 07.05.2009 18:38

1. xml.error.length() > 0.

Vas717 07.05.2009 18:45

Код AS3:

if ( xml.error[0] is XML ) { // code }
if ( xml.error is XMLList ) { // code }


wvxvw 07.05.2009 19:13

@Vas717:
Второй вариант не катит, селектор всегда лист возвращает, но может вернуть и пустой лист, поетому надо длину проверить.
Код AS3:

var xml:XML =
<foo>
        <bar/>
</foo>;
 
trace(xml.error is XMLList); // true


Division 07.05.2009 20:30

Всем спасибо. Насчёт length() думал, но показалось что не солидно выглядит (:
Цитата:

а как узнать имя не корневого узла?
Если бы я знал. Попробую сегодня ещё почитать, но что-то XML мне тяжко даётся.

Vas717 07.05.2009 20:55

); и на старуху бывает "прорурха"

s8000_1 07.05.2009 21:07

BlooDHounD, а Вы случайно не знаете какого-нибудь способа узнать имя некорневого узла? (раз уж разговор пошел)

etc 07.05.2009 21:29

s8000_1, об этом случайно написали в документации.

Geba 07.05.2009 22:34

Division, s8000_1 чтобы получить имя корневого узла или дочернего, можно попробовать сделать так
Код AS3:

var doc:XML=
<data>
        <error>
                <title>Ошибка пользователя</title>
                <msg>Возможные причины: Кривые руки</msg>
        </error>
</data>;
var rootName:String=doc.name(); // rootName="data"
if(doc.children().length())
        var childName:String=doc.*[0].name(); // childName="error"


s8000_1 07.05.2009 22:52

__etc, туплю.

Вопрос такой на самом деле: можно ли изменить значение value текстового элемента как-нибудь?

Division 07.05.2009 22:59

Geba
спасибо, позор мне (:
s8000_1
Код AS3:

var doc:XML=
<data>
        <error>
                <title>Ошибка пользователя</title>
                <msg>Возможные причины: Кривые руки</msg>
        </error>
</data>;
 
doc.error.msg = "текст ошибки";
trace(doc);


wvxvw 07.05.2009 23:01

Код AS3:

var xml:XML = <foo/>;
xml.setChildren("bar");
trace(xml.toXMLString()); //<foo>bar</foo>
xml = <foo/>;
xml.replace(0, "whatever");
trace(xml.toXMLString()); //<foo>whatever</foo>
xml = <foo/>;
xml.appendChild("some more text");
trace(xml.toXMLString()); //<foo>some more text</foo>


etc 07.05.2009 23:05

Цитата:

Сообщение от s8000_1 (Сообщение 818358)
Вопрос такой на самом деле: можно ли изменить значение value текстового элемента как-нибудь?

Как-нибудь:
Код AS3:

var xml:XML = <xml>
        <![CDATA[Hello!]]>
</xml>;
var node:XML = xml.children()[0];
node.parent().replace(node.childIndex(), <![CDATA[Hi!]]>);
trace(xml.toXMLString());


s8000_1 08.05.2009 02:10

Всем большое спасибо!


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

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