PDA

Просмотр полной версии : Ошибка интерпретатора XML: элемент имеет неверный формат.


grafillo!
04.09.2013, 22:22
Создал запрос к хмл, но мне выдаётся постоянно ошибка :Ошибка интерпретатора XML: элемент имеет неверный формат.
Формат хмл имеет вид:
<spisok>
<peoples></peoples>
<message></message>
</spisok>
Вроде норм делал по книге а почемуто не работает, подскажите в чём дело и как передать два массива данных.

dimarik
04.09.2013, 23:10
XML Validator (http://www.w3schools.com/xml/xml_validator.asp): "No errors found".

grafillo!
04.09.2013, 23:33
Дело в том что создаю вручную такой XML и он на другом коде работает.
Может ошибка в скрипте?
function senddata (vars:URLVariables ):void{
var requestmes:URLRequest = new URLRequest;
requestmes.url = "http://troll_ch/req.php";
requestmes.method = URLRequestMethod.POST;
requestmes.data = vars;

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(Event.COMPLETE, loadmes);

loader.load(requestmes);

trace (vars);
}
function loadmes (e:Event):void {
var resp:XML = XML(e.target.data);
//var postsList:XMLList = resp.spisok.peoples.pip;
//var postsNum:uint = postsList.length();
//trace ("posts"+postsNum);
}
Вот что приходит

<spisok><peoples time=1378319318></peoples><message></message></spisok>

Babylon
04.09.2013, 23:44
loader.dataFormat = URLLoaderDataFormat.BINARY

dimarik
05.09.2013, 00:00
loader.dataFormat = URLLoaderDataFormat.BINARY

Странно слышать это от адепта XML. Как вы ByteArray сконвертите в XML (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/package.html#XML()) с помощью
var resp:XML = XML(e.target.data);

Babylon
05.09.2013, 00:20
ByteArray(XML).uncompress();

dimarik
05.09.2013, 00:36
okouser, вы правы. Текст
<spisok><peoples time=1378319318></peoples><message></message></spisok>
не матчится грамматикой XML (http://www.w3.org/TR/xml11/)
[10] AttValue ::= '"' ([^<&"] | Reference)* '"'
| "'" ([^<&'] | Reference)* "'"
Проще говоря, атрибуты должны быть заключены в одинарные или двойные кавычки.

Но все же, чего-то я не понимаю в этой жизни. Судя по коду Starling, AssetManager (https://github.com/PrimaryFeather/Starling-Framework/blob/master/starling/src/starling/utils/AssetManager.as) 616 строка легко справляется с ByteArray, создавая полноценный XML с помощью
new XML(bytes)
где trace(bytes is ByteArray); // true;

Однако официальная документация (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/XML.html) говорит об обратном.

XML() Конструктор
public function XML(value:Object)
value:Object — Любой объект, который можно преобразовать в формат XML с помощью функции верхнего уровня XML().

А функция верхнего уровня XML(), как я уже указывал, в качестве аргумента принимает только примитивы, XML и XMLList, но не ByteArray.

Wolsh
05.09.2013, 00:53
var s:String = "<data><unit name='cylon'><mana>96</mana></unit></data>";
var b:ByteArray = new ByteArray();
b.writeUTFBytes(s);
var xml:XML = XML(b);
trace(xml.toXMLString());

dimarik
05.09.2013, 00:56
Значит, они забыли обновить документацию. Вы же не будете спорить, что (data as ByteArray).uncompress() становится примитивом?

Упс, опоздал.