Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-03-2009, 01:32   #1 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
zweiten knoten aus einer XML-Datei auszulesen klappt nicht

Hi!
Ich stell mich echt zu blöd an. Hab jetzt schon einpaar sachen mit einfachen XML-Files gemacht,alerdings komm ich bei dieser momentan nicht weiter.
Ich bräuchte eine kleine Hilfe.
leider konnte mir die Suche nicht wirklich helfen,hab versucht einige beispiel umzubauen, abe rich bekomm es nicht hin.

Wie spreche ich den zeiten Knoten(?) in einer XML-Datei mit AS1 richtig an?
XML:
HTML-Code:
<?xml version='1.0' encoding='utf-8'?>
<daten>
	<element A>
   		<meintext de="Gute Nacht" eng="Good Night" />
	</element A>
	<element B>
   		<meintext de="Gute Morgen" eng="Good Morning" />
	</element B>
	<element C>
 	  	 <meintext de="Hallo du" eng="Hello You" />
	</element C>
 </daten>
Ich wollte ein Array mit allen "Elementen" erstellen und pro Element die zwei attribute "de" und "eng" auslesen.

Das ganze soll dazu dienen meinen Flash Film zweisprachig zu gestalten,button-beschriftungen,texte etc. sollten dann in einer XML-datei verwaltet werden.
Ich hoffe das ist der richtige ansatz!
florist ist offline   Mit Zitat antworten
Alt 07-03-2009, 09:26   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Das ist kein Knoten, sondern ein Attribut.
Dieses kriegst du per Zugriff auf das Attributes-Array eines Kindknotens:
PHP-Code:
firstChild.firstChild.firstChild.attributes["de"// --> Gute Nacht 
Vielleicht doch mal n paar XML-Grundlagen lernen..?
[TUTORIAL] laden und verarbeiten von XML Dateien (basics)
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 07-03-2009, 13:22   #3 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Den Thread kannte ich schon, dort ist die struktur der XML-Datei allerdings anders als in meinem Fall
Beispiel aus dem genannten Thread:
Zitat:
<knoten>
<kindknoten name="Element eins" beschreibung="Beschreibung 1" />
</knoten>
Meine XML:
Zitat:
<daten>
<element A>
<meintext de="Gute Nacht" eng="Good Night" />
</element A>
Vielleicht hab ich mich falsch ausgedrückt, war schon spät.
Mein eigentliches Problem ist das Füllen der Arrays.
bisher hab ich das bei einfachen XML-Dateien so gemacht:
Code:
var XMLdaten = new XML();
XMLdaten.ignoreWhite=true; 
XMLdaten.load("test.xml");
XMLdaten.onLoad = function(success) {
	XMLdaten_deutsch = [];
	 XMLdaten_english = []; 
	if (success) { //wenn das laden der File erfolgreich war
		for (var i=0; i<XMLdaten.childNodes.length; i++) {
			trace("i: " + i + "|" + XMLdaten.childNodes.firstChild);
			 XMLdaten_deutsch[i] = XMLdaten.firstChild.childNodes[i].attributes.de; 
			 XMLdaten_english[i] = XMLdaten.firstChild.childNodes[i].attributes.eng;
		}
		trace("Fertig Geladen");
	}
}
Doch in meiner jetzigen XML-Datei, liegen die Attribute "de" und "eng" ja noch eine "ebene" tiefer.
Da liegt mein Problem. Ich versuch den genannten Thread nochmal zu verstehn, allerdings hab ich mir gestern echt mühe gegeben.
Bin leider kein Entwickler, deshalb tu ich mich leider bei sowas noch etwas schwer.
Ich wär trotzdem dankbar wenn du mir mit der For-Scheife weiterhelfen könntest.

Geändert von florist (07-03-2009 um 13:27 Uhr)
florist ist offline   Mit Zitat antworten
Alt 07-03-2009, 13:46   #4 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
try this:
PHP-Code:
var XMLdaten = new XML();
XMLdaten.ignoreWhite=true
XMLdaten.load("test.xml");
XMLdaten.onLoad = function(success) {
    
XMLdaten_deutsch = [];
     
XMLdaten_english = []; 
     var 
initNode XMLdaten.firstChild;
    if (
success) { //wenn das laden der File erfolgreich war
        
for (var i=0i<initNode.childNodes.lengthi++) {
            
trace("i: " "|" initNode.childNodes[i]);
             
XMLdaten_deutsch[i] = initNode.childNodes[i].childNodes[0].attributes.de
             
XMLdaten_english[i] = initNode.childNodes[i].childNodes[0].attributes.eng;
        }
        
trace("Fertig Geladen: "XMLdaten_deutsch);
    }

__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 07-03-2009, 14:04   #5 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Hab deinen Ansatz versucht, leider bleiben die beiden Arrays weiterhin leer.
Hab im Debugger festgestellt, dass die For-Schleife garnicht ausgeführt wird.
Er legt die lokae Variable "initNode" zwar an,geht in die if-bedingung
und springt dann aber direkt in den Trace-Befehl("Fertig geladen") und übergeht die For-Schleife?


Zitat:
initNode.childNodes.length
= 0

Woran kann das liegen?
florist ist offline   Mit Zitat antworten
Alt 07-03-2009, 16:12   #6 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
vielleicht wegen deriner xml-struktur?
PHP-Code:
<?xml version='1.0' encoding='utf-8'?>
<daten>
    <element A>
           <meintext de="Gute Nacht" eng="Good Night" />
    </element A>
    <element B>
           <meintext de="Gute Morgen" eng="Good Morning" />
    </element B>
    <element C>
            <meintext de="Hallo du" eng="Hello You" />
    </element C>
 </daten>
was soll da A, B bzw C

ich habe das geändert in
PHP-Code:
<?xml version='1.0' encoding='utf-8'?>
<daten>
    <element>
           <meintext de="Gute Nacht" eng="Good Night" />
    </element>
    <element>
           <meintext de="Gute Morgen" eng="Good Morning" />
    </element>
    <element>
            <meintext de="Hallo du" eng="Hello You" />
    </element>
 </daten>
dann klappt das auch, die struktur einer xml datei kannst du prima überprüfen wenn du sie in firefox öffnest.
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 08-03-2009, 12:49   #7 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Ich wollte die Buttonbeschriftungen, und sämtlichte Textfelder im Flashfilm aus der XML herraus befüllen. die elemnt A,B,C etc.. sollten später die verschiedenen Bezeichnungen tragen, so in der Art:

HTML-Code:
<?xml version='1.0' encoding='utf-8'?>
<daten>
    <button_senden>
           <meintext de="Gute Nacht" eng="Good Night" />
    </button_senden> 
    <headline_content>
           <meintext de="Gute Nacht" eng="Good Night" />
    </headline_content> 
...
...
<daten>
Damit der Benutzer später selbst ohne großen Aufwand die Texte ändern kann. Dabei wäre eine eindeutige Bezeichnung der Knoten in der XML-Datei echt nützlich! Gibt es keine Möglichkeit diese eindeutig zu benennen?
Vielleicht in irgendwie so:
HTML-Code:
<element name="button_senden">
...
<element name="headline_content">
So das ich den Wert von "name" in Flash ansprechen kann?
florist ist offline   Mit Zitat antworten
Alt 08-03-2009, 20:00   #8 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Man befüllt XML Dateien nicht über die Attribute. Spätestens bei Sonderzeichen wirds du damit Probleme bekommen. Außerdem ist es kein guter Stil alle Sprachen (es handelt sich ja scheinbar um sprachdateien) in einer XML zusamenzupacken. Besser wäre:

PHP-Code:
<?xml version='1.0' encoding='UTF-8'?>

<language>
  <entry>
    <name><![CDATA[back]]></name>
    <cont><![CDATA[zurück]]></cont>
  </entry>
  <entry>
    <name><![CDATA[mail]]></name>
    <cont><![CDATA[An einen Freund schicken]]></cont>
  </entry>
  <entry>
    <name><![CDATA[info]]></name>
    <cont><![CDATA[Zusätzliche Informationen]]></cont>
  </entry>
  <entry>
    <name><![CDATA[contact]]></name>
    <cont><![CDATA[Kontakt]]></cont>
  </entry>
  <entry>
    <name><![CDATA[loadinginterface]]></name>
    <cont><![CDATA[Lade Videoclip]]></cont>
  </entry>
  <entry>
    <name><![CDATA[loadingdata]]></name>
    <cont><![CDATA[Lade Daten]]></cont>
  </entry>
  <entry>
    <name><![CDATA[mName]]></name>
    <cont><![CDATA[Ihr Name]]></cont>
  </entry>
</language>
Und die dann so Abfragen und in einem Array speichern:

PHP-Code:
var _lang:Array      = new Array();
var 
_xml:XML         = new XML();
    
_xml.ignoreWhite true;

_xml.onLoad = function(success:Boolean):Void {    
  if(
success) {
    for(var 
x in _xml.firstChild.childNodes) {
      var 
childs:XML _xml.firstChild.childNodes[x].childNodes;
          
      
_lang[childs[0].firstChild.nodeValue] = childs[1].firstChild.nodeValue;
    }
  }
}
_xml.load("ordner/de/lang.xml"); 
Dann kannst du die Elemente jeweils über _lang["elementname"] ansprechen ... das ist auch im Code übersichtlicher weil da nicht irgendein Arrayeintrag steht sonder man schon am label sehen kann welches Sprachelement man da abfragt.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 08-03-2009, 21:04   #9 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Danke für die Tipps, das wusste ich nicht.
Is das erste mal, das ich sowas umsetzen muss.
Ich werd es morgen testen und versuchen deinen Code in AS1 umzusetzen,da ich in diesem Projekt noch AS1 verwende.
florist ist offline   Mit Zitat antworten
Alt 08-03-2009, 22:21   #10 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Du musst für AS1 ja nur die Typisierung weglassen.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 08-03-2009, 22:47   #11 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Super Danke!
Ich kanns leider erst morgen probieren,aber hab mir das Skript von dir mal kurz angesehen. Die Typisierung wegzulassen krieg ich hin, allerdings versteh ich die bedingung in deiner for-schleife nicht auf anhieb:
Code:
    for(var x in _xml.firstChild.childNodes) {
ich kenn bis jetzt nur solche bedingungen:
Code:
    for (i=0;  i < n; i++)
florist 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 00:03 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele