PDA

Volledige versie bekijken : Flash laadt XML-tekst in, maar CSS werkt er niet op ?!


tijmen_4real
%Europe/Berlin %819 %2008, 19:40
Hoi !

Via deze AS:
nieuwsTekst = "";
xmlDoc = new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.load("nieuwsbulletin.xml");
xmlDoc.onLoad = verwerkXML;
function verwerkXML(ok) {
if (ok) {
nieuwsbulletin = this.firstChild.childNodes;
for (j=0; j<nieuwsbulletin.length; j++) {
item = nieuwsbulletin[j].childNodes;
for (i=0; i<item.length; i++) {
if (item[i].nodeName == "datum") {
nieuws_txt.text += "datum: "+item[i].firstChild.nodeValue+" ";
}
if (item[i].nodeName == "afzender") {
nieuws_txt.text += "van: "+item[i].firstChild.nodeValue+"\n";
}
if (item[i].nodeName == "titel") {
nieuws_txt.text += item[i].firstChild.nodeValue+"\n";
}
if (item[i].nodeName == "nieuws") {
nieuws_txt.text += item[i].firstChild.nodeValue+"\n";
}
}
}
} else {
trace("XML verwerking geeft fouten");
}
}
stijl = new TextField.StyleSheet();
stijl.load("nieuws_opmaker.css");
stijl.onLoad = function() {
if (ok) {
nieuws_txt.StyleSheet = stijl;
nieuws_txt.html = true;
nieuws_txt.htmlText = nieuwsTekst;
}
};
laadt ik tekst uit van nieuwsbulletin.xml, en wil ik deze opmaken via nieuws_opmaker.css
Nu geeft hij de tekst correct weer, alleen wordt deze niet opgemaakt, zoals ik in de CSS wil:
boek {
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:12px;
color:#000000;
}
datum {
font-size:10px;
font-style:italic;
}
afzender {
font-size:10px;
font-style:italic;
}
titel {
font-size:14px;
font-weight:800;
}
nieuws {
font-size:12px
}

Ik zie niet in wat ik fout doe. Ook geeft Flash geen errors. Maar als ik de nieuwsTekst trace, krijg ik ook geen output te zien.

Wat doe ik fout, en waarom ?
Als bijlage de .fla, .xml en .css
Greetz,

Tijmen_4Real 8D

tijmen_4real
%Europe/Berlin %934 %2008, 22:25
<div> tags aanbrengen binnen de XML geeft alleen maar meer fouten. Weet er iemand wat er verkeerd is aan bovenstaande code ?

tijmen_4real
%Europe/Berlin %453 %2008, 10:53
Sorry dat ik op mezelf blijf posten, maar ik wil gewoon graag hulp ! Desperate !! :X

Doc
%Europe/Berlin %548 %2008, 13:09
hey tijmen,

Allereest zaten er wat kromme dingen in je code.
Wanneer het xml geladen is, vul je het tekstveld al met data (nieuws_txt.text += "datum: "+item[i].....)
Maar wanneer je css ingeladen is, vul je jou tekstveld met een lege variable (nieuws_txt.htmlText = nieuwsTekst; )
Ook je stylesheet klopte niet. Zoals je in de help kan zien (zoeken op StyleSheet) moet het niet
titel {
font-size:14px;
color: #663399;
} zijn, maar
.titel {
font-size:14px;
color: #663399;
}(de punt voor de classname)
En dan nog het volgende. Als je tekst ingeladen is, hoe weet flash dan welke css class er aan gehangen moet worden (titel, datum, boek etc)? :S want dat is niet terug te vinden in je code. Al met al niet zo vreemd dus dat het niet werkte.

Check mijn voorbeeld even. Voor mijn eigen gemak heb ik alleen de titel een css-opmaak meegegeven.
Succes ermee.

Doc.

tijmen_4real
%Europe/Berlin %615 %2008, 14:46
@Doc: je bijlage geeft een Unexpected file format. Heb je wel Flash 8, en geen CS3 ?

tijmen_4real
%Europe/Berlin %624 %2008, 14:59
Maar hoe kan ik nu de tekst, die uit de XML komt, zo aanroepen dat ik er CSS aan kan toewijzen ? Moet ik dan de nodeName aanspreken, en daar een class aan toewijzen ?? Dit is even boven mijn 'league', dus ik hoop dat iemand me wilt helpen ?

Kort gezegd: De Flash-movie laadt tekst uit de diverse <nodes> die in een XML staan. Hij zet ze in volgorde. Ik laad al een CSS-pagina in, maar wil nu dus iedere node een class voor de CSS-opmaak meegeven: hoe doe ik dat ?

tijmen_4real
%Europe/Berlin %650 %2008, 15:36
Ik heb nu ook dit geprobeerd:

...
if (item[i].nodeName == "datum") {
nieuws_txt.text += "<div class="datum">Op "+item[i].firstChild.nodeValue+"</div>";
}
if (item[i].nodeName == "afzender") {
nieuws_txt.text += "<div class="afzender">, door "+item[i].firstChild.nodeValue+"</div>";
}
...

Maar ook geen succes. Dan krijg ik een syntax error. En als ik de " voor de naam van de class vervang door ', is de error wel weg, maar werkt de CSS nog steeds niet... :(
Na veel ge-Google kwam ik hier op:
http://www.actionscript.org/forums/showthread.php3?t=128473
Maar ook dit mocht niet baten.... :(

Weet iemand hoe ik dit wel werkend kan krijgen ??

Gerrit55
%Europe/Berlin %712 %2008, 17:06
Flash ondersteunt geen divs, alleen p en span

vervang <div door <p
in je css definieer je een class met een punt voor de naam, dus:
.datum {
font-size:10px;
}

als je datum en afzender op 1 regel wilt, begin je datum met <span en geen eindtag en zet de eindtag /span> achter afzender.

tijmen_4real
%Europe/Berlin %483 %2008, 11:36
Ik heb het geprobeerd: de <div> tags vervangen door <p>, en in het CSS document voor ieder element een . (.item {) gezet, maar het heeft niet geholpen. Als ik dan de movie bekijk, laat hij bij het zien van de tekst ook de <p> tags zien.

Als ik het zo probeer:
if (item[i].nodeName == "afzender") {
nieuws_txt.text += "<p class ="datum">, door "+item[i].firstChild.nodeValue+"</p>\n";
if (item[i].nodeName == "titel") {
nieuws_txt.text += "<p class ="titel">"+item[i].firstChild.nodeValue+"</p>\n";
Krijg ik een syntax error, maar als ik dan class="afzender" vervang door class='afzender' dan geeft hij geen error meer, maar in beide gevallen wordt de CSS niet goed aangeroepen...:(

Er moet een andere manier zijn, weet IEMAND misschien hoe ?

Als bijlage wederom mijn .fla, .css en .xml

Dauntless
%Europe/Berlin %493 %2008, 11:50
Als je html text in een textvak wil zetten moet je eerst .html op true zetten en daarna het textvak vullen met .htmlText (en niet .text).

Je kan ook geen quotes zetten in een string (zoals je zelf ervaart); je kan ze wel escapen:
nieuws_txt.htmlText += "<p class =\"titel\">"+item[i].firstChild.nodeValue+"</p>\n";

(Uiteraard werken 'single quotes' evengoed).

tijmen_4real
%Europe/Berlin %589 %2008, 14:08
Dus nu heb ik er dit van gebrouwd:

function verwerkXML(ok) {
if (ok) {
nieuwsbulletin = this.firstChild.childNodes;
for (j=0; j<nieuwsbulletin.length; j++) {
item = nieuwsbulletin[j].childNodes;
for (i=0; i<item.length; i++) {
if (item[i].nodeName == "datum") {
nieuws_txt.htmlText += "<span><p class =\"datum\">Op "+item[i].firstChild.nodeValue+"</p>";
}
if (item[i].nodeName == "afzender") {
nieuws_txt.htmlText += "<p class =\"afzender\">, door "+item[i].firstChild.nodeValue+"</p></span>";
}
if (item[i].nodeName == "titel") {
nieuws_txt.htmlText += "<p class =\"titel\">"+item[i].firstChild.nodeValue+"</p>";
}
if (item[i].nodeName == "nieuws") {
nieuws_txt.htmlText += "<p class =\"nieuws\">"+item[i].firstChild.nodeValue+"</p>\n"
...

Maar nu wordt alleen de tekst weergegeven, zonder de CSS-opmaak. Die ziet er zo uit:
p.datum {
font-size:10px;
font-style:italic;
}
p.afzender {
font-size:10px;
font-style:italic;
}
p.titel {
font-size:14px;
font-weight:800;
}
p.nieuws {
font-size:12px
}

Kheb bovenstaand ook geprobeerd als .nieuws en alleen nieuws, maar dit gaf geen resultaat. En ook het aanbrengen van <span> tags zorgt er niet voor dat datum en afzender op dezelfde regel blijven.
De <p> tags lijken nu wel herkend, alleen wordt de opmaak via CSS nog niet geaccepteerd.

Waar doe ik het fout ? in de CSS zelf ??
En waarom wordt de <span> niet verwerkt, is dat omdat er een paragraaf na volgt (<p>) ???

Gerrit55
%Europe/Berlin %633 %2008, 15:11
Soms denk ik wel eens dat we Russisch schrijven en dat de mensen het niet kunnen lezen

Een aanhalingsteken in een string moet je escapen, dus met \", zoals Dauntless al opmerkt, of je zet het tussen quotes ' , anders krijg je toch een compiler foutmelding? en werkt je .fla toch niet?

nieuwsTekst is een string en geen instancenaam van een scherm-variabele, dus hier GEEN nieuwsTekst.htmlTekst gebruiken, maar alleen nieuwsTekst += etc.
In je stijl.onLoad vul je nieuws_txt.htmlText

In je CSS alleen id's aanmaken, dus GEEN p. ervoor (dat had ik ook niet gezegd toch?)
font-weight kun je beter op bold zetten, de rest is bijna niet te zien.
in je fla maak je de tekst op:

var nieuwsTekst:String = "" ;
xmlDoc = new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.load("nieuwsbulletin.xml");
xmlDoc.onLoad = verwerkXML;
function verwerkXML(ok) {
if (ok) {
nieuwsbulletin = this.firstChild.childNodes;
for (j=0; j<nieuwsbulletin.length; j++) {
item = nieuwsbulletin[j].childNodes;
for (i=0; i<item.length; i++) {
if (item[i].nodeName == "datum") {
nieuwsTekst += "<span class='datum'>datum: "+item[i].firstChild.nodeValue+" "; }
if (item[i].nodeName == "afzender") {
nieuwsTekst += "<p class='afzender'>van: "+item[i].firstChild.nodeValue+"</p></span>\n";
}
if (item[i].nodeName == "titel") {
nieuwsTekst += "<p class='titel'>" + item[i].firstChild.nodeValue+ "</p> \n";
}
if (item[i].nodeName == "nieuws") {
nieuwsTekst += "<p class='nieuws'>" + item[i].firstChild.nodeValue+"</p>\n"; }
}
}
} else {
trace("XML verwerking geeft fouten");
}
}

undersound
%Europe/Berlin %657 %2008, 15:47
Hey tijmen_4real,

Ik schrijf dit antwoord op basis van de code uit proto1.rar

Het probleem zat hem in 2 zaken:

1. het nieuws_txt field stond niet op html = true en je gebruikte nieuws_txt.text ipv nieuws_txt.htmlText

2. de volgorde van de executie van je code was verkeerd.

De volgorde was:
- xml object aanmaken
- xml verwerken
- stylesheet aanmaken en toepassen

De volgorde is nu:
- stylesheet aanmaken en toepassens
- xml object aanmaken
- xml verwerken

Bijgesloten de werkende files in een .rar

Groeten,
Undersound

tijmen_4real
%Europe/Berlin %662 %2008, 15:53
@undersound: de .fla die je meestuurde geeft een 'Unexpected File Format': CS3 toevallig ?

undersound
%Europe/Berlin %676 %2008, 16:14
heb hem opgeslagen als flash 8 nu

tijmen_4real
%Europe/Berlin %680 %2008, 16:19
Bedankt voor je hulp, tijd en moeite, allemaal !
Kga de vorige posts even goed doornemen en verwerken...

tijmen_4real
%Europe/Berlin %685 %2008, 16:26
Met een combinatie van de posts van Gerrit55, Dauntless en undersound heb ik er dit van kunnen maken, en HET WERKT ! Natuurlijk alle dank en respect aan/voor deze mede-Flashers, super !!

scrollT._height = 16.6;

function createXml() {
trace("Function: createXml");
trace("dan xml aanmaken \n");
nieuws_txt.html = true;
xmlDoc = new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.onLoad = verwerkXML;
xmlDoc.load("nieuwsbulletin.xml");
nieuws_txt.wordWrap = true;
nieuws_txt.multiline = true;
nieuws_txt.html = true;
}
function verwerkXML(ok) {
if (ok) {
trace("Function: verwerkXML()");
trace("en dan pas gaan we het textfield vullen");
nieuwsbulletin = this.firstChild.childNodes;
for (j=0; j<nieuwsbulletin.length; j++) {
item = nieuwsbulletin[j].childNodes;
for (i=0; i<item.length; i++) {
if (item[i].nodeName == "datum") {
var str:String = String(item[i].firstChild.nodeValue);
nieuws_txt.htmlText += "<span class='datum'>Op "+str+",</p>";
}
if (item[i].nodeName == "afzender") {
nieuws_txt.htmlText += "door <p class='afzender'>"+item[i].firstChild.nodeValue+"</p></span>\n";
}
if (item[i].nodeName == "titel") {
nieuws_txt.htmlText += "<p class='titel'>"+item[i].firstChild.nodeValue+"</p>\n";
}
if (item[i].nodeName == "nieuws") {
nieuws_txt.htmlText += "<p class='nieuws'>"+item[i].firstChild.nodeValue+"</p>\n\n";
}
}
}
} else {
nieuws_txt.htmlText = "Verwerking van XML geeft fouten";
}
}
function applyCss() {
trace("Function: applyCss()");
trace("eerst roepen we applyCss() aan \n");
// Instance van TextField.StyleSheet object maken
var styleObj:TextField.StyleSheet = new TextField.StyleSheet();
styleObj.onLoad = function(success:Boolean) {
if (success) {
nieuws_txt.styleSheet = styleObj;
createXml();
}
};
// CSS laden
styleObj.load("nieuws.css");
}
applyCss();

Hartstikke bedankt !!