2009-04-24 1 views
2

Итак, я работаю над быстрой утилитой, позволяющей простое редактирование файлов TMX. TMX в основном представляет собой XML-стандарт для хранения многоязычных переводов. Anyhoo, я импортирую TMX в приложение Adobe AIR через ссылку на файл, затем захватываю поток файлов, швыряя символы UTF-8 в строку, а затем эту строку в объект XML. THUS:Ошибки в реализации Flex 3 XML? Переписывание 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); 

Но, вот интересная деталь. Если fileData загружается как это: XML

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

Flex интерпретирует это как это:

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

О хо интересно! Атрибут xml:lang становится aaa:lang="en" xmlns:aaa="http://www.w3.org/XML/1998/namespace". Из моих кратких исследований, есть прецедент для этого, но это несколько притягательное предположение. Не создавая чрезмерных правил замены строк, есть ли способ обойти это?

ответ

1

Вы пытались использовать один из следующих вариантов?

default xml namespace = xml; 

или

use namespace xml; 

Перейти через документацию Namespaces.

1

Извините, не можете комментировать (пока?), Поэтому я поставлю это здесь.

Я могу повторить, если не добавить нестандартное пространство имен XML с пространством имен по умолчанию:

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"; 

Выход является <node aaa:base="myvalue" xmlns="http://namespacehere.org" xmlns:aaa="http://www.w3.org/XML/1998/namespace"/>

Добавление use namespace ns имеет никакого эффекта и пространства имен по умолчанию не применяется (его должен быть префикс).

Я пришел по этому вопросу несколько раз, но не смог изолировать причину. Примечание: все еще заканчивается префиксом «aaa» независимо от того, какой префикс или URI вы задали в пространстве имен. Странный.