|
|
|
|||||
Регистрация: Jul 2013
Сообщений: 13
|
Странные вещи с XML'ем
Имеется загружаемый флешем XML вот такого содержания.
<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> В общем одно сплошное расстройство. |
|
|||||
Регистрация: Jul 2013
Сообщений: 13
|
А вот и нет.
trace(xmlLoader.LicenseInfo[0].@Valid)//кидает ошибку как выше trace(xmlLoader.LicenseInfo[0])//undefined, несморя на то, что он есть в документе. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Покажите, как создается и как инициализируется переменная со странным именем xmlLoader
__________________
Reality.getBounds(this); |
|
|||||
Второй трейс неправильно обращается, а вот первый и третий должны срабатывать.
Попробуйте корневой тег в XML сделать без атрибутов. Я с этим сталкивался и только так проблема решилась. Но я так и не нашел, почему в AS такая ерунда. Если кто знает, напишите.
__________________
Мой профиль на фрилансе |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Вещи не странные, а абсолютно разумные. Нет у вашего xml элемента LicenceInfo. Есть элемент "http://www.payproglobal.com/"::LicenseInfo. Раз уж сделали namespace, нужно уметь с ним работать.
А так - все элементарно: 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]; } } } |
|
|||||
Регистрация: Jul 2013
Сообщений: 13
|
Хм.. Окей. Теперь ясно. Неймспейсы создавал не я а сервер, но теперь понятно.
Добавлено через 29 минут А вот и нет. Пример от maxkar работает, но только с упрощенными данными. Полный ответ сервера звучит так. <?xml version="1.0" encoding="utf-8"?> <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-ADFF</Key> <TotalUsages>1</TotalUsages> <UsagesLeft>0</UsagesLeft> <PurchaseDate>8/23/2013</PurchaseDate> <OrderReferenceNumber>1670098-001-1UT</OrderReferenceNumber> <CanBeActivated>False</CanBeActivated> </LicenseInfo></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> xmlLoader.load(new URLRequest("https://www.payproglobal.com/passport/service.asmx/ValidateLicense?ProductID=137951&CustomerEmail="+email+"&ActivationKey="+key)); Ну а дальше непонятно почему я вижу не весь XML |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Стоп! Вас < не смущают? Если вы ничего не перепутали, то у вас весь XML содержит ровно один элемент "http://www.payproglobal.com/"::string. Все остальное это один (или несколько, я спецификацию не учил) text node. В том текстовом узле содержится "произвольный текст", и с точки зрения всех инструментов, он является именно "текстом", а не набором элементов/атрибутов и т.п.. А в трейс вы выводите внутреннее содержимое. Попробуйте toXMLString вместо toString выводить. Вот для него как раз все нормально должно быть.
Т.е. "<<<" в элементе test при записи в XML будет выглядеть как А вот при печати все будет зависеть от того, каким именно вы его выводите. Так что у вас все парсится нормально. Правильнее всего исправить сервер (чтобы он не строку отдавал, а само значение). Но если не получается, вам нужно выбирать дочерний для корневого элемент (он должен быть типа "текст") и затем еще раз его парсить. Ну и проверить, что будет, если в ответе есть несколько LicenseInfo. |
Часовой пояс GMT +4, время: 14:17. |
|
« Предыдущая тема | Следующая тема » |
|
|