Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-04-2005, 19:49   #1 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
XML: html innerhalb nodeValue

Hi!

hab ne kurze Frage zu XML..

Also, ich lade ganz normal und ohne Probleme XML Daten in Flash rein. Klappt auch alles super und ohne Probleme. Allerdings:

ich hab z.B. so einen Knoten
Code:
<knoten attribut="wert">Blabla</knoten>
das lade ich ja mit
ActionScript:
  1. xml.[pfad zum knoten].firstChild.nodeValue
funktioniert super.

Jetzt möchte ich aber z.B. so einen Wert in den Knoten schreiben:
Code:
<knoten attribut="wert"><b>fetter text</b> normaler text</knoten>
wenn ich das jetzt mit .firstChild.nodeValue auslese, bekomme ich null zurück. Wahrscheinlich weil jetzt noch ein untergeordneter Knoten drin ist.
Wenn ich einfach nur .firstChild benutze, bekomme ich nur den Text bis zum schlißenden b-Tag heraus.

Wie kann ich den kompletten Wert innerhalb des Knoten auslesen? also mit untergeordneten Tags? (CDATA hilft leider auch nicht, er gibt die > alt &gt; etc. zurück..)
pokepika ist offline   Mit Zitat antworten
Alt 25-04-2005, 23:43   #2 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
das kannste einfach umgehen indem du ganz auf nodeValue verzichtest und ausschließlich mit attributen arbeitest, z.B.:
ActionScript:
  1. <knoten txt="deinText.txt" />

deinText.txt ==> txt=<b>fetter text</b> normaler text

in deinem text kannt du dann tags drin haben wie du lustig bist...
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 26-04-2005, 06:59   #3 (permalink)
Definitionssache
 
Benutzerbild von dburucu
 
Registriert seit: Apr 2003
Ort: Braunschweig
Beiträge: 2.433
oder so sollte es auch gehen:

anstatt:
ActionScript:
  1. <knoten attribut="wert"><b>fetter text</b> normaler text</knoten>

das:
ActionScript:
  1. <knoten attribut="wert"><![CDATA[<b>fetter text</b> normaler text]]></knoten>

oder:
ActionScript:
  1. <knoten attribut="wert">&lt;b&gt;fetter text&lt;/b&gt; normaler text</knoten>

schau mal unter Escape Characters:
http://www.w3schools.com/xml/xml_cdata.asp
dburucu ist offline   Mit Zitat antworten
Alt 26-04-2005, 07:23   #4 (permalink)
 
Registriert seit: Dec 2003
Beiträge: 202
HTML-Code:
<knoten attribut="wert"><p><b>fetter text</b> normaler text</p></knoten>
so kannst es mit ".firstChild" auslesen.
bryan.fury ist offline   Mit Zitat antworten
Alt 26-04-2005, 08:35   #5 (permalink)
TheMask
 
Registriert seit: Jan 2002
Beiträge: 196
ich hab das bei mir so gelösst:
HTML-Code:
<knoten attribut="wert" doFormat="true">[b]fetter text[/b] normaler text</knoten>
wenn doFormat auf true gesetzt ist ersetz ich alle vormommen von [ durch < und alle ] durch >

also mit:
ActionScript:
  1. .nodeValue.split("[").join("<").split("]").join(">")

gibt bestimmt nen besseren weg aber der funktioniert auf jeden fall...
__________________
grz jason
jason_mask ist offline   Mit Zitat antworten
Alt 26-04-2005, 13:13   #6 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
ok ^^

fangen wir oben an...

@mooseMash: ja, das wär natürlich ne möglichkeit, aber wenn ich nen längeren text habe, der zudem noch über mehrere Zeilen geht (der knoten heißt in diesem Fall "description"), dann ist das nicht sehr schön gelöst

@dburucu: mit CDATA hab ichs auch probiert, aber da werden dann die tags im textfeld selbst ignoriert.
ich werd mir deinen link aber mal ansehen

@bryan.fury: jo, das hab ich auch gesehen. notfalls leg ich da ein "blind" tag drum..

@jason_mask: hehe, so ala bbcode.. aber das ist auch ne notfall lösung..


//edit: hey, dburucu, ich hab das mit dem CDATA nochmal ausprobiert.. irgendwie geht das ja doch!? ^^ gestern gings nicht.. naja. danke!
Problem gelöst
pokepika ist offline   Mit Zitat antworten
Alt 26-04-2005, 14:35   #7 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
hi pokepika,
kann dir nicht ganz folgen, insbesondere bei längerem text macht es sinn diesen auszulagern, schon allein um die lesbarkeit der xml-datei zu wahren...
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 26-04-2005, 21:26   #8 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
du hast doch gesagt, dass ich alles als attribut benutzen soll..
aber z.B. bei sowas:

Code:
<tag attr="dies ist ein langer Text. Als Attribut sieht das nicht gerade übersichtlich aus, wenn man ihn hier rein schreibt. Besonders, wenn er über
mehrere Zeilen
geht." />
da ist es so schöner und übersichtlicher:
Code:
<tag>Dies ist auch ein langer Text. Innerhalb des Tags ist das viel übersichtlicher, auch bei
mehreren Zeilen
erkennt man noch,
dass es zum tag gehört, wobei man beim Attribut nicht umbedingt das ende erkennt</tag>
oder?
pokepika ist offline   Mit Zitat antworten
Alt 29-04-2005, 21:38   #9 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
sorry, ich hatte mich wohl nicht klar ausgedrückt.

ActionScript:
  1. <knoten txt="deinText.txt" />

ist ein verweis auf die datei in der dein text steht. Die textdatei 'deinText.txt' kann so lang sein wie sie lustig ist. Sie kann auch tags enthalten wie sie mag.

mittels new LoadVar() schreibst du dir dann eine funktion die den text lädt und ihn da hinbringt wodu ihn haben willst, das attribut wird also nie länger als dein dateiname.

klarer?
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 29-04-2005, 21:53   #10 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
achso meinst du das..

ja ok, aber selbst bei sehr sehr langen texten ist das mit xml irgendwie noch besser
pokepika ist offline   Mit Zitat antworten
Alt 13-05-2005, 15:05   #11 (permalink)
subfiler
 
Registriert seit: Jul 2004
Beiträge: 175
schön das es bei XML bedingung ist, das "<" und ">" nur in tags benutzt werden können und nicht als attributen werte. somit wird das spiel extrem einfach. angenommen c ist das knoten tag als flash XML node, dann geht das mit 3 zeilen code:
Code:
sText = c.toString();
sText = sText.substr(sText.indexOf(">")+1,sText.length);
sText = sText.substr(0,sText.lastIndexOf("<"));
sText enthält nun den inhalt des tags knoten inklusiven allen html und sonstigen tags. auch schön: funktioniert ebenfalls ohne html. bleibt nur noch das problem, das flash leerzeichen und zeilenumbrüche für voll nimmt, auch wenn diese ans htmltext attribut eines textfeldes übergeben werden. hier kann ebenfalls eine kleine routine helfen, die das ganze aufräumt:
Code:
htmlClean = function(t){
		t = t.split("\n").join(" ");
		t = t.split("\r").join(" ");
 		t = t.split("\t").join(" ");
 		t = t.split("\xA0").join(" ");		
		t = t.split("  ").join(" ");
		t = t.split("  ").join(" ");
		t = t.split("  ").join(" ");
		if (t.charAt(0)==" ") t = t.substr(1,t.length-1);
		if (t.charAt(t.length-1)==" ") t = t.substr(0,t.length-1);
		return t;
	}
bei der programmierung wurde ein bischen geschlampt, aber ich glaube das stört niemanden. sollten nicht alle doppelungen von leerzeichen entfernt sein, einfach noch mehrere der t = t.split(" ").join(" "); einfügen.
hakre ist offline   Mit Zitat antworten
Alt 15-05-2005, 09:23   #12 (permalink)
subfiler
 
Registriert seit: Jul 2004
Beiträge: 175
die htmlClean funktion ist leider nicht perfekt. falls nun leerzeichen nach einem <br /> kommen, dann stehen die halt am anfang der zeile. eine kleine modifikation die dieses problem behebt:
PHP-Code:
function htmlClean(t){
    
t.split("\n").join(" ");
    
t.split("\r").join(" ");
    
t.split("\t").join(" ");
    
t.split("\xA0").join(" ");
    
t.split("  ").join(" ");
    
t.split("  ").join(" ");
    
t.split("  ").join(" ");
    
t.split("<br />").join("\r");
    
t.split("\r ").join("\r");
    
t.split("  ").join(" ");
    if (
t.charAt(0)==" "t.substr(1,t.length-1);
    if (
t.charAt(t.length-1)==" "t.substr(0,t.length-1);
    return 
t;


Geändert von th. (15-05-2005 um 12:30 Uhr)
hakre ist offline   Mit Zitat antworten
Alt 15-05-2005, 12:49   #13 (permalink)
TheMask
 
Registriert seit: Jan 2002
Beiträge: 196
\n und \r

nur als keiner hinweiss:

windows macht aus einem zeilenumbruch die kombination \n\r
die htmlClean function ersetzt aber sowohl \n alsauch \r durch ein leerzeichen. weshalb also aus einem zeilen umbruch 2 leerzeichne würden...

übrigens heisst \n new line und \r carriage return (also wagenrücklauf)
also wär es richtiger das \r wegzuschmeissen und das \n zu behalten...
auch weil linux und ich glaub auch mac nur \n benutzen...

ich weiss das es nicht die sauberste lösung ist den prototype vom string zu verändern aber das hält den code so schön übersichtlich...

Edit: die htmlClean funktion: wenns zuviele leerzeichen sind bleiben noch nen paar stehn deshalb sollte in ner whileschleife geprüft werden ob noch welche stehngeblieben sind...

have fun modifying...

ActionScript:
  1. String.prototype.replace = function(s1, s2) {
  2.     var srcStr = this;
  3.     while (srcStr.indexOf(s1)>=0) {
  4.         srcStr = srcStr.split(s1).join(s2);
  5.     }
  6.     return srcStr;
  7. };
  8. function htmlClean(t) {
  9.     t = t.replace("\n", " ");
  10.     t = t.replace("\r", "");
  11.     t = t.replace("\t", " ");
  12.     t = t.replace("\xA0", " ")
  13.     t = t.replace("<br />", "\n")
  14.     t = t.replace("  ", " ");
  15.     return t;
  16. }
__________________
grz jason

Geändert von jason_mask (15-05-2005 um 12:54 Uhr)
jason_mask ist offline   Mit Zitat antworten
Alt 15-05-2005, 16:46   #14 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
und was bringt einem das jetzt? bzw. was hat das mit dem Thread zu tun?
pokepika ist offline   Mit Zitat antworten
Alt 15-05-2005, 16:51   #15 (permalink)
subfiler
 
Registriert seit: Jul 2004
Beiträge: 175
zur erklärung:
das ersetzen von \r und \n durch leerzeichen geschieht deswegen, weil beides im html (genauso wie tab und shift-space) unbedeutende zeichen sind (ausser bei <pre>, aber das ist mir egal). deswegen werden \r \n \t und \xA0 durch leerzeichen ersetzt, die dann wieder zusammengefasst werden, weil doppelte leerzeichen sich nicht doppelt auswirken (nur bei flash halt, aber das ist ja der bug). es stimmt, das hier nicht wirklich geprüft wird, ob noch doppelte leerzeichen vorkommen oder nicht, das ist ein manko der routine.

in der 2. version der routine wird die darstellung von <br /> durch \r reduziert, weil es für flash das gleiche ist. dadurch ergibt sich die möglichkeit auf leerzeichen am zeilenanfang zu prüfen, die unter normalen umständen keine auswirkungen hätten. da hier flash aber wieder diese zeichen darstellt, werden sie entfernt.

\r und \n
falls flash \n und \r nicht gleich behandeln sollte, ist natürlich die frage ob \n oder \r benutzt wird. weis jemand, ob der flashplayer hier auf den unterschiedlichen plattformen einen unterschied macht?

generell gilt:
win: \n\r
mac:\r
*nix:\n
hakre ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele