2009-04-24 13 views
2

Alors je travaille sur un utilitaire rapide pour permettre l'édition simple des fichiers TMX. TMX est essentiellement une norme basée sur XML pour stocker des traductions multilingues. Anyhoo, je l'importation TMX dans une application Adobe AIR via une référence de fichier, puis récupérer le flux de fichiers, gifler les caractères UTF-8 dans une chaîne, puis cette chaîne dans un objet XML. THus:Erreurs dans l'implémentation Flex 3 XML? Réécriture xml: lang

var stream:FileStream = new FileStream(); 
stream.open(event.target /*file data*/ as File, FileMode.READ); 
var fileData:String = stream.readUTFBytes(stream.bytesAvailable); 
var tmxXml:XML = new XML(fileData); 

Mais, voici la partie intéressante. Si fileData est chargé comme ceci:

<tuv xml:lang="en"> 
    <seg>About Us</seg> 
</tuv> 

XML de Flex interprète comme ceci:

<tuv aaa:lang="en" xmlns:aaa="http://www.w3.org/XML/1998/namespace"> 
    <seg> 
     About Us 
    </seg> 
</tuv> 

Oh ho intéressant! L'attribut xml:lang devient aaa:lang="en" xmlns:aaa="http://www.w3.org/XML/1998/namespace". D'après mes brèves recherches, il y a des précédents à ce sujet, mais c'est un peu une supposition succincte. Sans créer trop de règles de remplacement de chaîne, existe-t-il un moyen de contourner cela?

Répondre

1

Avez-vous essayé d'utiliser une des options suivantes?

default xml namespace = xml; 

ou,

use namespace xml; 

Passez par la documentation Namespaces.

1

Désolé, je ne peux pas commenter (encore?) Alors je vais mettre ça ici.

Je peux reproduire lors de l'ajout d'un espace de noms par défaut au format XML avec un espace de noms par défaut:

var node:XML = <node xmlns="http://namespacehere.org"/> 
var ns:Namespace = new Namespace("xml", "http://www.w3.org/XML/1998/namespace"); 
[email protected]::base = "myvalue"; 

sortie est <node aaa:base="myvalue" xmlns="http://namespacehere.org" xmlns:aaa="http://www.w3.org/XML/1998/namespace"/>

Ajout use namespace ns n'a aucun effet et un espace de noms par défaut n'est pas applicable (il doit être préfixé).

J'ai rencontré ce problème plusieurs fois, mais je n'ai pas été en mesure d'isoler la cause. Note: on se retrouve toujours avec un préfixe "aaa" quel que soit le préfixe ou l'URI que vous avez défini dans l'espace de noms. Impair.