Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.08.2013, 16:09
dabar347 вне форума Посмотреть профиль Отправить личное сообщение для dabar347 Найти все сообщения от dabar347
  № 1  
Ответить с цитированием
dabar347

Регистрация: Jul 2013
Сообщений: 13
По умолчанию Странные вещи с XML'ем

Имеется загружаемый флешем XML вот такого содержания.
Код AS3:
<string xmlns="http://www.payproglobal.com/">
<LicenseInfo Valid="true"> 
<CustomerEmail>test@payproglobal.com</CustomerEmail> 
<CustomerName>John Doe</CustomerName> 
<ProductName>Paw-Paw Creator</ProductName> 
<Key>GAEG-BDHR-FPYR-ADFT</Key> 
<TotalUsages>1</TotalUsages> 
<UsagesLeft>0</UsagesLeft> 
<PurchaseDate>8/23/2013</PurchaseDate> 
<OrderReferenceNumber>1670098-001-1UT</OrderReferenceNumber> 
<CanBeActivated>False</CanBeActivated> 
</LicenseInfo>
</string>
XML загружается в переменную xmlLoader. Затык произошел с выводом. Я хочу получить значение атрибута Valid элемента LicenseInfo. Пытаюсь вывести это такими вариантами
Код AS3:
trace(xmlLoader.LicenseInfo.@Valid[0]);//undefined
trace(xmlLoader.@Valid[0]);//undefined
trace(xmlLoader.LicenseInfo[0].@Valid[0]);//Кидает эксепшн TypeError: Error #1010: A term is undefined and has no properties.
В общем одно сплошное расстройство.

Старый 23.08.2013, 16:10
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Код AS3:
xmlLoader.LicenseInfo[0].@Valid
Уот так уот.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 23.08.2013, 16:19
dabar347 вне форума Посмотреть профиль Отправить личное сообщение для dabar347 Найти все сообщения от dabar347
  № 3  
Ответить с цитированием
dabar347

Регистрация: Jul 2013
Сообщений: 13
А вот и нет.
trace(xmlLoader.LicenseInfo[0].@Valid)//кидает ошибку как выше
trace(xmlLoader.LicenseInfo[0])//undefined, несморя на то, что он есть в документе.

Старый 23.08.2013, 16:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,437
Покажите, как создается и как инициализируется переменная со странным именем xmlLoader
__________________
Reality.getBounds(this);

Старый 23.08.2013, 16:47
SvetozarPNZ вне форума Посмотреть профиль Отправить личное сообщение для SvetozarPNZ Найти все сообщения от SvetozarPNZ
  № 5  
Ответить с цитированием
SvetozarPNZ
 
Аватар для SvetozarPNZ

Регистрация: Dec 2009
Сообщений: 125
Записей в блоге: 1
Второй трейс неправильно обращается, а вот первый и третий должны срабатывать.
Попробуйте корневой тег в XML сделать без атрибутов. Я с этим сталкивался и только так проблема решилась. Но я так и не нашел, почему в AS такая ерунда. Если кто знает, напишите.

Код AS3:
<string xmlns="http://www.payproglobal.com/">
 ...
</string>

Старый 23.08.2013, 17:02
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 6  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Вещи не странные, а абсолютно разумные. Нет у вашего xml элемента LicenceInfo. Есть элемент "http://www.payproglobal.com/"::LicenseInfo. Раз уж сделали namespace, нужно уметь с ним работать.

А так - все элементарно:
Код AS3:
package {
import flash.display.*;
import flash.text.*;
 
public class NST extends Sprite {
  public function NST() {
 
    const xml : XML =<string xmlns="http://www.payproglobal.com/">
<LicenseInfo Valid="true"> 
</LicenseInfo>
</string>;
 
    namespace ns = "http://www.payproglobal.com/";
 
    const tf : TextField = new TextField();
    addChild(tf);
    tf.text = "Wow:" + xml.ns::LicenseInfo.@Valid[0];
  }
}
}

Старый 23.08.2013, 17:54
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 7  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
оу, а слона неймспейс я и не заметил
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 23.08.2013, 22:36
dabar347 вне форума Посмотреть профиль Отправить личное сообщение для dabar347 Найти все сообщения от dabar347
  № 8  
Ответить с цитированием
dabar347

Регистрация: Jul 2013
Сообщений: 13
Хм.. Окей. Теперь ясно. Неймспейсы создавал не я а сервер, но теперь понятно.

Добавлено через 29 минут
А вот и нет. Пример от maxkar работает, но только с упрощенными данными. Полный ответ сервера звучит так.
Код:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.payproglobal.com/">&lt;LicenseInfo Valid="true"&gt;
  &lt;CustomerEmail&gt;test@payproglobal.com&lt;/CustomerEmail&gt;
  &lt;CustomerName&gt;John Doe&lt;/CustomerName&gt;
  &lt;ProductName&gt;Paw-Paw Creator&lt;/ProductName&gt;
  &lt;Key&gt;GAEG-BDHR-FPYR-ADFF&lt;/Key&gt;
  &lt;TotalUsages&gt;1&lt;/TotalUsages&gt;
  &lt;UsagesLeft&gt;0&lt;/UsagesLeft&gt;
  &lt;PurchaseDate&gt;8/23/2013&lt;/PurchaseDate&gt;
  &lt;OrderReferenceNumber&gt;1670098-001-1UT&lt;/OrderReferenceNumber&gt;
  &lt;CanBeActivated&gt;False&lt;/CanBeActivated&gt;
&lt;/LicenseInfo&gt;</string>
Но если я пытаюсь оттрейсить принятые данные то получаю в консоли вот это:
Код:
<LicenseInfo Valid="true">

  <CustomerEmail>test@payproglobal.com</CustomerEmail>

  <CustomerName>John Doe</CustomerName>

  <ProductName>Paw-Paw Creator</ProductName>

  <Key>GAEG-BDHR-FPYR-ADFF</Key>

  <TotalUsages>1</TotalUsages>

  <UsagesLeft>0</UsagesLeft>

  <PurchaseDate>8/23/2013</PurchaseDate>

  <OrderReferenceNumber>1670098-001-1UT</OrderReferenceNumber>

  <CanBeActivated>False</CanBeActivated>

</LicenseInfo>
Все форматирование сохранено. Запрашиваю данные:
Код AS3:
xmlLoader.load(new URLRequest("https://www.payproglobal.com/passport/service.asmx/ValidateLicense?ProductID=137951&CustomerEmail="+email+"&ActivationKey="+key));
В функции-хендлере вынимаю данные из лоадера:
Код AS3:
var xmlLoader:XML = XML((event.currentTarget as URLLoader).data);
Ну а дальше непонятно почему я вижу не весь XML

Старый 23.08.2013, 23:19
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 9  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Стоп! Вас &lt; не смущают? Если вы ничего не перепутали, то у вас весь XML содержит ровно один элемент "http://www.payproglobal.com/"::string. Все остальное это один (или несколько, я спецификацию не учил) text node. В том текстовом узле содержится "произвольный текст", и с точки зрения всех инструментов, он является именно "текстом", а не набором элементов/атрибутов и т.п.. А в трейс вы выводите внутреннее содержимое. Попробуйте toXMLString вместо toString выводить. Вот для него как раз все нормально должно быть.

Т.е. "<<<" в элементе test при записи в XML будет выглядеть как
Код:
<test>&lt;&lt;&lt;</test>
А вот при печати все будет зависеть от того, каким именно вы его выводите.

Так что у вас все парсится нормально. Правильнее всего исправить сервер (чтобы он не строку отдавал, а само значение). Но если не получается, вам нужно выбирать дочерний для корневого элемент (он должен быть типа "текст") и затем еще раз его парсить. Ну и проверить, что будет, если в ответе есть несколько LicenseInfo.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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