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

Wecoyote 26.12.2009 23:15

Обработка xml
 
Флешка запрашивает метод веб сервиса на asp.net, получает в ответ xml
Полученный xml присваивается переменной.
xml следующего содержания:

Код:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <tstAdditionResponse xmlns="http://tempuri.org/">
      <tstAdditionResult>13</tstAdditionResult>
    </tstAdditionResponse>
  </soap:Body>
</soap:Envelope>

Необходимо присвоить переменной типа Number значение tstAdditionResult (в данном случае - 13)

Помогите разобраться, пытался писать что-то вроде:
trace(myXml.tstAdditionResult);
Выводит пустую строку.

Dos87 27.12.2009 00:24

Поставь брекпоинт на метод, в котором происходит завершение загрузки XML и в ДебагМод (ctrl+shift+enter) посмотри путь к переменной "tstAdditionResult".
Н-р (на сокетах):
брекпоинт на: private function loadCompleteHandler(e:DataEvent):void {}
Смотри переменную "е".
e.data - это присланная xml
Скорее всего обратиться к "tstAdditionResult" можно так: e.data.tstAdditionResponse.tstAdditionResult

udaaff 27.12.2009 00:45

Код AS3:

var tempuriNS:Namespace = new Namespace("http://tempuri.org/");
var result:Number = Number(xml..tempuriNS::tstAdditionResult);


Dos87 27.12.2009 03:16

Точно. Забыл про пространства имён. Никогда ими не пользуюсь =)

Wecoyote 27.12.2009 07:28

udaaff, спасибо, работает. А почему две точки (xml..) ? Если ставлю одну - пишет result = 0, если две result = 13.

Добавлено через 2 часа 37 минут
Эххъъ. Прошу не бить ногами, но получилась такая штуковина:
Имеем XML:

Код:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <getCarByIndexResponse xmlns="http://tempuri.org/">
      <getCarByIndexResult>
        <Car>
          <petName>Zippy</petName>
          <maxSpeed>180</maxSpeed>
        </Car>
        <Car>
          <petName>Fred</petName>
          <maxSpeed>210</maxSpeed>
        </Car>
        <Car>
          <petName>Sally</petName>
          <maxSpeed>80</maxSpeed>
        </Car>
      </getCarByIndexResult>
    </getCarByIndexResponse>
  </soap:Body>
</soap:Envelope>

Чтобы добраться до св-ва petName, например второго в списке автомобиля (значение "Fred") приходится писать вот такую строку:

Код AS3:

((myXml..myNamespace::getCarByIndexResult)..myNamespace::Car[1])..myNamespace::petName

Если это можно сделать не извращаясь так, то укажите пожалуйста на мою ошибку.

udaaff 27.12.2009 11:27

Цитата:

А почему две точки (xml..) ?
Цитата:

Оператор .. обеспечивает навигацию к потомкам объекта XML или XMLList, либо (в сочетании с оператором @) находит соответствующие атрибуты потомков. Соответствующие элементы или атрибуты не обязательно должны быть прямыми потомками объекта XML или XMLList (дочерними объектами первого уровня); они могут располагаться на более низком уровне дерева (например, быть дочерними объектами второго уровня). Результатом является объект XMLList, так как может совпадать несколько дочерних элементов или атрибутов.
В данном случае можно сразу XMLList всех элементов Car вытянуть:
Код AS3:

var ns:Namespace = new Namespace("http://tempuri.org/");
trace(xml..ns::Car[1].ns::petName) // Fred


Wecoyote 27.12.2009 11:40

udaaff, еще раз спасибище. Очень помог.


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

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