2010-09-16 5 views
1

Je lis essayant de charger XML à partir d'un ByteArray comme suit:Flex: Message d'erreur de « bien formé » balisage, même si XML est bien formé

var xmlString:String = myByteArray.readUTFBytes(numBytes); 
var myXML:XML = new XML(xmlString); 

Quand je fais cela, je reçois le erreur d'exécution suivante sur le constructeur XML lorsque je cours dans Flash Player 9:

TypeError: Erreur # 1088: Le balisage dans le document suivant l'élément racine doit être bien formé.

Ce message d'erreur ne se produit pas dans Flash Player 10. Je peux utiliser le débogueur pour vérifier que le XML semble bien formé. Le XML est en UTF-8.

Répondre

1

La solution à ce problème particulier pour moi était qu'il y avait un inutile Byte Order Mark au tout début du fichier, que j'ai dû supprimer. Lors de l'inspection du fichier avec un éditeur hexadécimal, j'ai vu comme suit les principaux octets du fichier:

EF BB BF

Le Flash Player 9 runtime a apparemment un problème avec ce Byte Order Mark sur un fichier UTF-8, est inutile car il n'y a pas de commande d'octets en UTF-8, par opposition à UTF-16 et UTF-32. Flash Player 10 n'a aucun problème avec cette marque de commande d'octets.

Cela explique, pourquoi this other blog entry documents que la solution suivante a fonctionné pour eux:

xmlString = xmlString.substr(1); 

Cette solution particulière n'a pas fonctionné tout à fait pour moi, car il déplacé l'erreur d'exécution Flash Player 10 utilisateurs, au lieu de Flash Player 9 utilisateurs. Puisque nous avions le contrôle de l'entrée XML, nous pouvions simplement le modifier, mais si le XML provenait d'une source que nous ne contrôlions pas, je suppose que nous aurions pu tester le ByteArray pour la nomenclature principale et l'ignorer comme indiqué ci-dessus.

Plusieurs entrées de blog ont été utiles pour confirmer que la nomenclature était le problème, comme celui-ci entry, dans lequel un intervenant affirme que sa solution à la même erreur d'exécution 1088 était:

For me the problem was XML saved in UTF with BOM.

En outre, this other blog entry fourni plus de confirmation du même problème survenant en Java:

When dealing with a UTF-8 encoded RSS feed, this three-byte pattern (0xEF 0xBB 0xBF) in >the prolog can cause all sorts of interesting XML parsing problems

+0

Et si vous ajoutez un 'au début du xml? – Amarghosh

+0

La déclaration XML était la première chose (après la nomenclature) dans le fichier XML. –

Questions connexes