Вход

Просмотр полной версии : Как заэмбедить XML?


__i
28.02.2007, 17:17
Вопрос собственно вверху.

Вариант

<mx:XML source="assets/my.xml" id="myXml" />


Не катит, почему? Вот история почему:

Потому что умные разработчики из адоба решили, что настоящий хмл не может содержать строчки типа <![CDATA[...]]>, и просто их нафиг вырезают, оставляя содержимое этой CDATA.
А насколько вы понимаете хмл

<root>
<node>
<![CDATA[Is <b>bold</b> text]]>
</node>
</root>

отличается немного от

<root>
<node>
Is <b>bold</b> text
</node>
</root>


ну и еще пару ласковых слов о разработчиках:
Жил был себе хмл который был объявлен так

<mx:XML source="assets/my.xml" id="myXml" />

отзывался от на свойство с именем myXml, и тип этого свойства был XML
но решили мы сделать так

<mx:XML source="assets/my.xml" id="myXml" format="xml" />

и о чудо!, теперь тип свойства XMLNode.
Подумаешь переменная всего лишь сменила тип. А вы не догадались? ну как же вы могли,
разработчики же ласково написали в хелпе

The default format property value of e4x creates an XML object, which implements the XML-handling standards defined in the ECMA-357 specification (known as "E4X"). For backward compatibility, you can set the format property to xml to generate an object of the type flash.xml.XMLNode.

подробный текст тут http://livedocs.adobe.com/flex/201/langref/index.html?mxml/xml.html

etc
28.02.2007, 18:17
А во внешнем as-файле XML тоже без CDATA?

__i
28.02.2007, 22:22
непонял вопроса(

хмл файл - обычный БОЛЬШОЙ хмл, который содержит CDATA
т.е. конвертить его в строку и вставлять это не выход.

если ставить опцию компилятора чтобы он генерил as файлы, по там можно найти мой хмл в виде строки, но с аккуратно вырезаными CDATA

__i
28.02.2007, 22:37
проблема частично решена

package
{
public class LocalXML
{
public static var source : XML = <test>
<item>
<!CDATA[<b>типа работает</b>]]>
</item>
</test>
}
}

главное удалить строку

<?xml version="1.0" encoding="utf-8"?>

Но блин тупо это все, копипаст рулит, из-за того что адобовцы так решили

Azy
02.03.2007, 11:42
нафиг такие извращения? просто енкодь строку в цдате.

__i
02.03.2007, 14:24
Куда ее инкодить ? ты имеешь ввиду &lt; &gt;?
Если да то это не подходит по 2м причинам:
1. нужно вставлять эту строку в html поле, чтобы оно выглядело красиво ) было жырным а не было написано <b></b>
2. ну и представь провернуть эту замену в 100 кибобайтном файле с хмл.

Уж лучше копи-паст )

etc
02.03.2007, 15:05
split, join не катит? Медленный?
А в связи с чем такая необходимость зашивать большой XML внутрь флеша?

__i
02.03.2007, 15:38
split, join не катит? Медленный?

Чего сплит джон ? есть просто ХМЛ файл и все (отельная хмл-ка которая сама по себе живет на диске)

А в связи с чем такая необходимость зашивать большой XML внутрь флеша?

язык приложения по умолчанию, на случай если отвалился инет или нет возможности догрузить нужный язык, или добрые дяди на сервере решили бахнуть файлы с языками. Вобщем чтобы пользователь всегда мог увидеть текст во приложении, а не голые кнопы и поля)

etc
02.03.2007, 20:54
Чего сплит джон ?
Ну теги заменить из сущностей в нормальные…

__i
03.03.2007, 14:08
Ну теги заменить из сущностей в нормальные…
КАК? Я мне просто нужно включить в код хмл который лежит в файле без измениний (идеальный вариант, но судя по всему рыбы тут не будет).

Следующий из наипростейших вариантов которые я нашел, это объявить клас и туда копипейстом вставить ХМЛ, что не очень удобно(.

etc
03.03.2007, 14:10
Давай-ка ты соберешь небольшой тестовый проект, чтобы видеть проблему наглядно.

__i
03.03.2007, 14:33
XML файл:

<?xml version="1.0" encoding="utf-8"?>
<root>
<Text><![CDATA[One <b>Bold</b> line, Not 3 lines]]></Text>
</root>

Этот же хмл вставленный в класс MyMegaXML

package
{
public class MyMegaXML
{
public static var source = <root>
<Text><![CDATA[One <b>Bold</b> line, Not 3 lines]]></Text>
</root>
}
}


ну и само приложение

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:XML source="text.xml" id="myXML"/>
<mx:Label text="Эмбеженый ХМЛ:"/>
<mx:Label x="200" text="воткнут копипастом в код ХМЛ:"/>
<mx:Text y="30" htmlText="{myXML.children()[0]}" >
</mx:Text>

<mx:Text y="30" x="200" htmlText="{MyMegaXML.source.children()[0]}" >
</mx:Text>

</mx:Application>

etc
03.03.2007, 15:03
Вот два изврата:

1) Используем format="xml". Получаем требуемое в лучшем виде:
myXML.firstChild.childNodes.join('')
2) Не используем format="xml". Получаем:
myXML.children()[0].children().toString().split('\n').join(' ');
Минусы: перевод строки таким образом накроется.

Пока больше мыслей нет. По мне так первый вариант интереснее.