Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Распознавание xml, приходящего в String (http://www.flasher.ru/forum/showthread.php?t=162014)

mikhailk 29.07.2011 15:02

Распознавание xml, приходящего в String
 
Есть функция со строковым параметром, в котором приходит то просто строка, то строка с xml-кодом. Нужно на входе распознавать и обрабатывать в зависимости от типа.

Понятное дело, попробовал

Код AS3:

try
{
  var strXML:XML = XML(inputStr);
}
catch(e:Error)
{
  trace("это невалидный xml или не xml вообще");
}

Ожидал, что преобразование строковых переменных вызовет исключение, которое я обработаю.
Однако strXML прекрасно получается, даже если на входе "123", т.е., исключения не возникает.

Как идентифицировать xml?

bav 29.07.2011 15:06

Код AS3:

if (stringParam.indexOf("<") == 0)

Вообще же зависит от того насколько "просто строка" может быть похожа на XML.

in4core 29.07.2011 15:07

Код AS3:

if ( inputStr is XML )

Так

bav 29.07.2011 15:13

in4core,
Код AS3:

var justString:String = "123";
var xmlString:String = '<?xml version="1.0" encoding="utf-8" ?><data><node>foo</node></data>';
trace(justString is XML)// false
trace(xmlString is XML);    // false


Hidest 29.07.2011 15:15

Сравнить с типом XML можно только после парсинга строки. А автору надо до.

upd: Во, Bav в общем-то это и показал ))

mikhailk 29.07.2011 15:16

"is XML" не отработало.
Код AS3:

var inputStr:String = "123";                        
if (inputStr is XML) trace(inputStr, "is XML");
else trace(inputStr, "is not XML");
 
inputStr = "<node>123</node>";                       
if (inputStr is XML) trace(inputStr, "is XML");
else trace(inputStr, "is not XML");

трейс:

Код:

123 is not XML
<node>123</node> is not XML

опоздал :)


чего делать?

DaFive 29.07.2011 15:17

А почему оно должно ругаться, если вы её принудительно делаете иксэмелем.

Попробуйте выполнить код:
Код AS3:

var xml:XML = '123';
trace(xml);

и
Код AS3:

var xml:XML = XML('123');
trace(xml);

В первом - RTE, во втором - 123.

mikhailk 29.07.2011 15:19

Цитата:

Сравнить с типом XML можно только после парсинга строки. А автору надо до.
Странно, что парсинг строковой переменной без скобок не дает ошибки.

Добавлено через 2 минуты
Цитата:

Попробуйте выполнить код:
var xml:XML = '123';
trace(xml);
а такой код какую ошибку выдаст?

Код AS3:

var xmlStr:XML = "<node>123</node>";


КорДум 29.07.2011 15:22

А что мешает завести второй параметр в методе - isXML:Boolean?

DaFive 29.07.2011 15:25

Цитата:

а такой код какую ошибку выдаст?

Код AS3:

var xmlStr:XML = "<node>123</node>";


1067: Implicit coercion of a value of type String to an unrelated type XML.
Другими словами - вы говорите, что xmlStr - это XML, а присваиваете ему String.


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

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