Просмотр полной версии : Создание динамических текстовых полей согласно содержимому XML файла
jakim_denis
02.08.2008, 18:20
добрый день!
Подскажите пожалуста, как работая с вот таким XML:
−
<datapacket>
<row pID="1" Business="Business1" Address="Address 1" Telephone="12345" Website="http://www.b1.com" Email="email1@something.com" Details="some text for Details." Picture="image1.jpg"/>
<row pID="2" Business="Business2" Address="Address 2" Telephone="67879" Website="http://www.b2.com" Email="email2@something.com" Details="some more text for Details." Picture="image2.jpg"/>
<row pID="3" Business="Business3" Address="Address 3" Telephone="010203" Website="http://www.b2.com" Email="email3@something.com" Details="and some more text for Details." Picture="image3.jpg"/>
</datapacket>
Для каждого ROW создать отдельное динамическое текстовое поле шириной скажем 200px/висотой 400px и выстроить из по горезонтали на подобии http://www.x3studios.com/en/
Какую логистику и инструментарий для этого лутше использовать?
Разбирался как обрабатывать XML согласно вот этого мануала. http://www.adobe.com/devnet/flash/articles/flash_xmlphp_print.html
Зарание прошу извенить за скорее всего глупый вопрос новичка )))
Так и не понял, что именно у Вас не получилось. Покажите Ваш код.
jakim_denis
02.08.2008, 18:43
Так и не понял, что именно у Вас не получилось. Покажите Ваш код.
ну у меня пока что не то чтобы не получилось ) Я просто хочу вокруг монитора и незнаю с какого боку подойти к решению такой задачи и какой инструментарий стоит для этого использовать.
jakim_denis
02.08.2008, 20:26
Так и не понял, что именно у Вас не получилось. Покажите Ваш код.
Перерывши форумы пришол к такому:
В данный момент я работаю с таким кодом:
Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;
headlineXML = new XML();
headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");
function myLoad(ok) {
if (ok == true) {
Publish(this.firstChild);
}
}
function Publish(HeadlineXMLNode) {
if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
content = "<b>List:</b><br><br>";
story = HeadlineXMLNode.firstChild;
while (story != null) {
if (story.nodeName.toUpperCase() == "STORY") {
lead = "";
body = "";
URL = "";
element = story.firstChild;
while (element != null) {
if (element.nodeName.toUpperCase() == "LEAD") {
lead = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "BODY") {
body = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "URL") {
URL = element.firstChild.nodeValue;
}
element = element.nextSibling;
}
content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
createTextField("dynamic_txt", 10, 0, 0, 150, 30);
dynamic_txt.border = true;
dynamic_txt.html = true;
dynamic_txt.autoSize = true;
dynamic_txt.htmlText=content;
}
story = story.nextSibling;
}
}
}
Для XML:
<broadcast>
<story>
<lead>This is Headline 1</lead>
<body>This is where you can add content that will appear under the first headline</body>
<URL>http://www.communitymx.com/</URL>
</story>
<story>
<lead>This is Headline 2</lead>
<body>This is content that can appear under the second headline.</body>
<URL>http://www.flash-remoting.com/</URL>
</story>
</broadcast>
Данный код создает TextField и вставляет в него все содержимое XML, мне же необходимо для каждого <story> создать отдельный и выстроить их один за другим по горизонтали.
Надеюсь я движусь в правильном русле
Уже лучше)
У Вас получается один текстфилд, потому что Вы создаете его (думаете что их) на одной глубине. А на одной глубине может быть только один объект. Значит надо ввести счетчик нодов и использовать его значение для управления глубиной и заодно координатой по горизонтали.
Перед циклом while вставим объявление переменной - нашего счетчика var counter:Number = 0;А в теле цикла, при создании текстфилда, воспользуемся им
content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
counter+=1; // увеличиваем значение счетчика
jakim_denis
03.08.2008, 15:52
Я логистику решение задачи понял.
Спасибо огромное!
Еще маленький вопрос:
Подскажите, а какой синтаксис правильно использовать для
dynamic_txt.border = true;
dynamic_txt.html = true;
dynamic_txt.autoSize = true;
dynamic_txt.htmlText=content;
чтоб дать им имена dynamic1_txt ....... dynamicX_txt ?
Ну например так
var _txt:TextField = this["dynamic"+counter+"_txt"];
_txt.html = _txt.autoSize = true;
_txt.htmlText=content;или делаем ссылку сразу при создании (если возможно)
var _txt:TextField = this.createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
_txt.html = _txt.autoSize = true;
_txt.htmlText=content;
counter+=1; // увеличиваем значение счетчика
jakim_denis
03.08.2008, 17:54
я пробовал - но что-то кажись тогда не так с скриптом в целом (
Код:
Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;
headlineXML = new XML();
headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");
function myLoad(ok) {
if (ok == true) {
Publish(this.firstChild);
}
}
function Publish(HeadlineXMLNode) {
if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
content = "";
story = HeadlineXMLNode.firstChild;
while (story != null) {
if (story.nodeName.toUpperCase() == "STORY") {
lead = "";
body = "";
URL = "";
element = story.firstChild;
var counter:Number = 0;
while (element != null) {
if (element.nodeName.toUpperCase() == "LEAD") {
lead = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "BODY") {
body = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "URL") {
URL = element.firstChild.nodeValue;
}
element = element.nextSibling;
}
content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
var _txt:TextField = this["dynamic"+counter+"_txt"];
_txt.html = true;
_txt.border = true;
_txt.autoSize = true;
_txt.htmlText=content;
counter+=1;
}
story = story.nextSibling;
}
}
}
Не дает вообще никакого результата при запуске мувика (
var counter:Number = 0;ПЕРЕД while а не внутри
counter+=1;в конце while, т.е. перед story = story.nextSibling;
Счетчи считает стори, а у Вас - почемуто считает ноды внутри стори)))
jakim_denis
03.08.2008, 18:22
Перепутад wile =)))
Поправил, но толку было 0 (((
Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;
headlineXML = new XML();
headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");
function myLoad(ok) {
if (ok == true) {
Publish(this.firstChild);
}
}
function Publish(HeadlineXMLNode) {
if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
content = "";
story = HeadlineXMLNode.firstChild;
var counter:Number = 0;
while (story != null) {
if (story.nodeName.toUpperCase() == "STORY") {
lead = "";
body = "";
URL = "";
element = story.firstChild;
while (element != null) {
if (element.nodeName.toUpperCase() == "LEAD") {
lead = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "BODY") {
body = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "URL") {
URL = element.firstChild.nodeValue;
}
element = element.nextSibling;
}
content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
var _txt:TextField = this["dynamic"+counter+"_txt"];
_txt.html = true;
_txt.border = true;
_txt.autoSize = true;
_txt.htmlText=content;
}
counter+=1;
story = story.nextSibling;
}
}
}
В ответ лишь белый скрин и пустое окно ошибок (
headlineXML.ignoreWhite = true; Забыли (ну или не знали))))
Примерно так
Stage.align = "LT";
Stage.scaleMode = "noScale";
//embedFonts = true;
headlineXML = new XML();
headlineXML.ignoreWhite = true;
headlineXML.onLoad = function (ok) {
ok ? Publish(this.firstChild) : trace("XML loading ERROR!");
}
headlineXML.load("headlines.xml");
function Publish(HeadlineXMLNode:XMLNode) {
if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
var story:XMLNode = HeadlineXMLNode.firstChild;
var counter:Number = 0;
while (story != null) {
if (story.nodeName.toUpperCase() == "STORY") {
var lead:String = "";
var body:String = "";
var URL:String = "";
var element:XMLNode = story.firstChild;
while (element != null) {
if (element.nodeName.toUpperCase() == "LEAD") {
lead = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "BODY") {
body = element.firstChild.nodeValue;
}
if (element.nodeName.toUpperCase() == "URL") {
URL = element.firstChild.nodeValue;
}
element = element.nextSibling;
trace(element)
}
var content:String = "<a href='"+URL+"'>"+lead+"</a>"+"\n"+body+"<br><br>";
var _txt:TextField = createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
_txt.wordWrap = true;
_txt.html = true;
_txt.border = true;
_txt.autoSize = true;
_txt.htmlText=content;
}
counter+=1;
story = story.nextSibling;
}
}
}
jakim_denis
03.08.2008, 20:05
headlineXML.ignoreWhite = true; Забыли (ну или не знали))))
не лечит (
Приведенный выше код делает то что Вы хотели. На этом я с Вами временно прощаюсь, чтобы у Вас не создалось впечатление, что можно сделать сайт на флэше, ничего не изучая и ни разу не открыв хелп. Учите язык и удачи!
jakim_denis
03.08.2008, 20:24
Приведенный выше код делает то что Вы хотели. На этом я с Вами временно прощаюсь, чтобы у Вас не создалось впечатление, что можно сделать сайт на флэше, ничего не изучая и ни разу не открыв хелп. Учите язык и удачи!
Ок
Спасибо огромное за помощь которая само по себе была велика!
Хелпом орудую постоянно но просто он не всегда обьясняет мои ошибки.
Буду лабать скрипт дальше, так как это было не все - скрипт так и не выводит текст из xml ((
Ну скажем так, это не в моей манере шутить) Смотрим:
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.