Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-05-2004, 19:06   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 9
Question Probleme beim XML in zweidim Array einlesen

Hallo,

nachdem ich gedacht hatte, den Fehler gefunden zu haben ist erneut ein Problem aufgetaucht.

Ich scheine immer noch das Array falsch angelegt zu haben bzw. falsch zu füttern.

Nach Einlesen der XML-Datei sagt mir das Programm bei der Kontrollausgabe durch die Funktion displayStep undefined.

Ich benötige einen zweidimensionalen Array player[][], der in der ersten Dimension den Step, in der zweiten Dimension die Playerinformationen vom Typ Playa (beliebig viele Player) enthält.

Was mache ich falsch? Vielen Dank!

ActionScript:
  1. Playa= function( ){}
  2. Playa.player_name = "Checker";
  3. Playa.playernr = 8;
  4. Playa.player_x = 100;
  5. Playa.player_x = 100;
  6.  
  7. player = [[],[Playa]];
  8.  
  9. xmlData = new XML();
  10. xmlData.ignoreWhite = true;
  11. xmlData.load ("taktikstream1.xml");
  12.  
  13. _level0.y=-1;
  14. _level0.z=0;
  15.  
  16. xmlData.onLoad = function (success)
  17. {
  18.         if (success)
  19.         {
  20.             for (var a = 0; a<xmlData.firstChild.childNodes.length; a++) {
  21.                var tmpnodea=xmlData.firstChild.childNodes[a].nodeName;
  22.                var tmpvala=xmlData.firstChild.childNodes[a].firstChild.nodeValue;
  23.                _level0.player.push([a]);
  24.               
  25.                if (tmpnodea=="taktik_step")
  26.                {
  27.                    _level0.y++;
  28.                    _level0.z=0;
  29.                }
  30.                for (var b = 0; b<xmlData.firstChild.childNodes[a].childNodes.length; b++) {
  31.                  var tmpnodeb=xmlData.firstChild.childNodes[a].childNodes[b].nodeName;
  32.                  var tmpvalb=xmlData.firstChild.childNodes[a].childNodes[b].firstChild.nodeValue;
  33.                  
  34.                     if (tmpnodeb=="player")
  35.                  {
  36.                         _level0.player[_level0.y].push(new Array(Playa));
  37.                     }
  38.                  for (var c = 0; c<xmlData.firstChild.childNodes[a].childNodes[b].childNodes.length; c++) {
  39.                         var tmpnodec=xmlData.firstChild.childNodes[a].childNodes[b].childNodes[c].nodeName;
  40.                         var tmpvalc=xmlData.firstChild.childNodes[a].childNodes[b].childNodes[c].firstChild.nodeValue;
  41.                         switch (tmpnodec)
  42.                         {
  43.                             case "playernr":_level0.player[_level0.y][_level0.z].playernr=tmpvalc;break;
  44.                             case "player_name":_level0.player[_level0.y][_level0.z].player_name=tmpvalc;break;
  45.                             case "player_x":_level0.player[_level0.y][_level0.z].player_x=tmpvalc;break;
  46.                             case "player_y":_level0.player[_level0.y][_level0.z].player_y=tmpvalc;_level0.z++;break;
  47.                         }
  48.                  }   
  49.                }
  50.             }         
  51.         }
  52.         displayStep(0);
  53.         displayStep(1);
  54.         displayStep(2);
  55. }
  56.  
  57. function displayStep(nr)
  58. {   
  59.     trace("\n---"+nr+"----\n");
  60.     for (x=0;x<_level0.player[nr].length;x++)
  61.     {   
  62.         trace(_level0.player[nr][x].player_name);
  63.         trace(_level0.player[nr][x].player_x);
  64.         trace(_level0.player[nr][x].player_y);
  65.     }
  66. }

Hier mein XML-Code:

Code:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE taktiken [
	<!ELEMENT taktikstream (taktikstream_name?,taktik_step+)>
	<!ELEMENT taktik_step (stepnr?,descript?,player+,ball*)>
	<!ELEMENT player (playernr?,player_name?,player_x,player_y)>
	<!ELEMENT ball (ball_x,ball_y)>
	
]>

<taktikenstream>
	<taktikstream_name>first taktik</taktikstream_name>
	<taktik_step>
		<stepnr>1</stepnr>
		<descript>ball abfangen</descript>
		<player>
			<playernr>8</playernr>
			<player_name>Maex</player_name>
			<player_x>200</player_x>
			<player_y>300</player_y>
		</player>
		<player>
			<playernr>9</playernr>
			<player_name>Toin</player_name>
			<player_x>400</player_x>
			<player_y>300</player_y>
		</player>
		<ball>
			<ball_x>200</ball_x>
			<ball_y>300</ball_y>
		</ball>
	</taktik_step>
	<taktik_step>
		<stepnr>2</stepnr>
		<descript>kreuzen</descript>
		<player>
			<playernr>8</playernr>
			<player_name>Maex</player_name>
			<player_x>400</player_x>
			<player_y>200</player_y>
		</player>
		<player>
			<playernr>9</playernr>
			<player_name>Toin</player_name>
			<player_x>200</player_x>
			<player_y>200</player_y>
		</player>
		<ball>
			<ball_x>200</ball_x>
			<ball_y>210</ball_y>
		</ball>
	</taktik_step>
	<taktik_step>
		<stepnr>3</stepnr>
		<descript>kreuzen</descript>
		<player>
			<playernr>8</playernr>
			<player_name>Maex</player_name>
			<player_x>100</player_x>
			<player_y>100</player_y>
		</player>
		<player>
			<playernr>9</playernr>
			<player_name>Toin</player_name>
			<player_x>100</player_x>
			<player_y>200</player_y>
		</player>
		<ball>
			<ball_x>300</ball_x>
			<ball_y>310</ball_y>
		</ball>
	</taktik_step>
</taktikenstream>
rognox ist offline   Mit Zitat antworten
Alt 15-05-2004, 20:46   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Hallo rognox,

das Zerlegen deines XMLs teilst du am besten in ein paar Funktionen auf, von denen jede immer nur eine Art von Objekt parst. So kommst du nicht so leicht durcheinander und die Pfade im XML werden auch kürzer.

ActionScript:
  1. function parseStream (xmlData)
  2. {
  3.     trace ("parseStream " + xmlData);
  4.     var stepList = new Array ();
  5.     var node = xmlData.firstChild;
  6.     while (node) {
  7.         switch (node.nodeName) {
  8.         case 'taktik_step' :
  9.             stepList.push (parseStep (node));
  10.             break;
  11.         }
  12.         node = node.nextSibling;
  13.     }
  14.     return stepList;
  15. }
  16. //
  17. function parseStep (xmlData)
  18. {
  19.     trace ("parseStep " + xmlData);
  20.         //
  21.     var playerList = new Array ();
  22.     var node = xmlData.firstChild;
  23.     while (node) {
  24.         switch (node.nodeName) {
  25.         case 'player' :
  26.             playerList.push (parsePlayer (node));
  27.             break;
  28.         }
  29.         node = node.nextSibling;
  30.     }
  31.     return playerList;
  32. }
  33. //
  34. function parsePlayer (xmlData)
  35. {
  36.     trace ("parsePlayer " + xmlData);
  37.     var player = new Object ();
  38.     var node = xmlData.firstChild;
  39.     while (node) {
  40.         switch (node.nodeName) {
  41.         case 'playernr' :
  42.             player.playernr = node.firstChild.nodeValue;
  43.             break;
  44.         case 'player_name' :
  45.             player.player_name = node.firstChild.nodeValue;
  46.             break;
  47.         case 'player_x' :
  48.             player.player_x = node.firstChild.nodeValue;
  49.             break;
  50.         case 'player_y' :
  51.             player.player_y = node.firstChild.nodeValue;
  52.             break;
  53.         }
  54.         node = node.nextSibling;
  55.     }
  56.     return player;
  57. }
  58. //
  59. function displayStep (nr)
  60. {
  61.     trace ("\n---" + nr + "----\n");
  62.     for (var x = 0; x < _level0.player[nr].length; x++) {
  63.         trace (_level0.player[nr][x].player_name);
  64.         trace (_level0.player[nr][x].player_x);
  65.         trace (_level0.player[nr][x].player_y);
  66.     }
  67. }
  68. //
  69. var player = null;
  70. //
  71. function main ()
  72. {
  73.     var xmlData = new XML ();
  74.     xmlData.ignoreWhite = true;
  75.     xmlData.onLoad = function (success)
  76.     {
  77.         player = parseStream (xmlData.firstChild);
  78.         //
  79.         displayStep (0);
  80.         displayStep (1);
  81.         displayStep (2);
  82.     };
  83.     xmlData.load ("taktikstream.xml");
  84. }
  85. //
  86. main ();
bokel ist offline   Mit Zitat antworten
Alt 16-05-2004, 11:54   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 9
Thumbs up Vielen Dank (o.T.)

Vielen Dank, klappt wunderbar.
rognox 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 02:41 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele