XML -> JavaScript auslesen

gunhero

Mitglied
Hallo liebe Forenleser,
ich suche nun schon seit längerem eine Funktion, die mir eine XML-Ausgabe in ein JS-Array schreibt. Leider hab ich nichts passendes gefunden. Mein System würde von der Datenbank Daten auslesen, per PHP verarbeiten, per xml_encode() in eine XML-Ausgabe umwandeln und dann sollte natürlich auch JS diese Ausgabe wieder lesen können. Am besten das ganze unabhängig von der Struktur (n-dimensional).
Wisst ihr da was?

Dankeschön

mfg
gunhero
 
Moin,

anstatt es umständlich in einen Array umzuwandeln, belasse es wie es ist, und erzeuge dort ein XML-Dokument, das erhält ohne viel Arbeit die originale Struktur :)

Du kannst es dann nach Belieben mit Array-Methoden durchforsten(getElementsByTagName() liefert ja einen Array zurück)...hast aber auch die komplette DOM-Werkzeugkiste an Board, was den Zugriff weitaus einfacher gestaltet als bei einem schlichten Array.

http://www.w3schools.com/Dom/dom_parser.asp
 
Hm ...
danke für deine schnelle Antwort jedoch hab ich da irgendwie ein Problem. Der Weg der Daten ist bei mir wie folgt: SQL-DB -> PHP -> XML -> JS
die XML wird von PHP autom. per funktion xmlrpc_encode() generiert. Diese sieht dann wie folgt aus:
Code:
<params>
?
	<param>
?
	<value>
?
	<struct>
?
	<member>
<name>home_team</name>
?
	<value>
<string>Team1</string>
</value>
</member>
?
	<member>
<name>guest_team</name>
?
	<value>
<string>Team2</string>
</value>
</member>
?
	<member>
<name>home_goal</name>
?
	<value>
<int>2</int>
</value>
</member>
?
	<member>
<name>guest_goal</name>
?
	<value>
<int>1</int>
</value>
</member>
?
	<member>
<name>time</name>
?
	<value>
<string>2006-01-01</string>
</value>
</member>
</struct>
</value>
</param>
</params>
Diese XML wird nun in JS verarbeitet. Aber ich weiß ja nicht wie die encode-funktion die tags nennt (also hier params, param, value, struct ...). Ich setze nur die Array-Felder bzw. -Werte (hier: home_team: Team1, guest_team: Team2, ...).
und wie soll ich das nun weiter behandeln ? Meine Idee war eben es mittels einer funktion in 1 n-dimensionales array zu tun mit dem aufbau: array['home_team'][0] = "Team1", array['guest_team'][0] = "Team2" ... usw (natürlich dann ebenfalls mit mehrereren einträgen)
sorry falls ich mich weng doof angstelle, hab schon einiges drüber gelesen jedoch steig ich da immernoch nicht so super durch :)
danke für die mithilfe
gunny
 
Zuletzt bearbeitet:
So ... nun hab ich schonmal bissl was rausgefunden:
Code:
var xmlResponse = xmlHttp.responseXML;
var xmlRoot = xmlResponse.documentElement;
alert (xmlRoot.getElementsByTagName("string").item(0).firstChild.data);
alert (xmlRoot.getElementsByTagName("string").item(1).firstChild.data);
alert (xmlRoot.getElementsByTagName("name").item(0).firstChild.data);
alert (xmlRoot.getElementsByTagName("name").item(1).firstChild.data);
Dies gibt nacheinander "Team1", "Team2", "home_team", "guest_team" aus. Ich will aber, dass ich bei folgendem Code "Team1", "Team2" erhalte:
Code:
var xmlResponse = xmlHttp.responseXML;
var xmlRoot = xmlResponse.documentElement;
alert (xmlRoot.getElementsByTagName("home_team").item(0).firstChild.data);
alert (xmlRoot.getElementsByTagName("guest_team").item(1).firstChild.data);
Was heißt ich will ... ich bekomm es ja nicht, aber ich möchte "home_team" und nen Index "0" angeben und dann eben das 1. Home-Team erhalten :) Bevor ich es in XML umgewandelt habe war es ja auch in nem Array [home_team][0] --> "Team1" verknüpft.
Vielleicht ist es jetzt weng klarer.

danke
 
Bevor ich es in XML umgewandelt habe war es ja auch in nem Array [home_team][0] --> "Team1" verknüpft.
Vielleicht ist es jetzt weng klarer.

danke

Mir ist nicht so klar, warum du aus einem Array XML generierst, welches du dann wieder in einen Array umwandeln willst :rolleyes:
Weiterhin ist nicht klar, warum du dann ein Element <name> erzeugst, und nicht 2 Elemente Namens home_team und guest_team, wenn du darauf bequem zugreifen willst.
 
Mir ist nicht so klar, warum du aus einem Array XML generierst, welches du dann wieder in einen Array umwandeln willst :rolleyes:
Weiterhin ist nicht klar, warum du dann ein Element <name> erzeugst, und nicht 2 Elemente Namens home_team und guest_team, wenn du darauf bequem zugreifen willst.

Hi
Naja ... ich hab mir das halt als Schnittstelle zwischen PHP und JS für AJAX-Sachen sagen lassen, dass man dafür dann XML oder aber JSON verwendet. Hinbekommen tue ich irgendwie garnichts. :/
Die XML (oder auch das JSON-Script) generiere ja nicht ich sondern lass es automatisch generieren, sodass man eben auch mit anderen Programmiersprachen (andere Anwendung zb) ohne Probleme auf eine "genormte" Schnittstelle zugreifen kann.
So hab ich das zumindest verstanden was mit "XML RPC" zu tun hat :)
Klär mich bitte auf wenn ich da total falsch bin.

Danke für deine Mühe
Gruß gunny

edit: Vielleicht könntest du mir mal kurz eine Programmierpassage liefern, die zeit, wie du das machen würdest (PHP -> XML/JSON -> JS)
 
Zuletzt bearbeitet:
Naja, wenn du das XML noch für andere Anwendungen benötigst, ist das schon gut so.

Mich verwirrt allerdings bereits der Aufbau, dieser ist nicht gerade sinnvoll, da dort kein direkter Bezug zwischen den Teams und den dazu passenden Daten herrscht, so findet man den Namen von Team1 in member[0]...die Tore dazu in member[2].
Das wird dir den weitergehenden Zugriff auf die Daten nicht sehr vereinfachen.

Aber wenn du darauf bestehst :rolleyes:
definiere dir global ein paar Variablen, woran du den Tagnamen erkennst, dann sollte es dir möglich sein, auf die von dir bevorzugte Art dort heranzukommen:
Code:
home_team='string';
guest_team='string';
//.....
alert (xmlRoot.getElementsByTagName(home_team).item(0).firstChild.data);
alert (xmlRoot.getElementsByTagName(guest_team).item(1).firstChild.data);


Einen sinnvollen Aufbau des XML würde ich mir so vorstellen:
Code:
<root>
  <spieltag>
    <nr>1</nr>
    <match>
      <date>2006-01-01</date>
      <home>
        <team>Team1</team>
        <goals>1</goals>
      </home>
      <guest>
        <team>Team2</team>
        <goals>2</goals>
      </guest>
    </match>
    <match>
      <date>2006-01-03</date>
      <home>
        <team>Team3</team>
        <goals>1</goals>
      </home>
      <guest>
        <team>Team4</team>
        <goals>0</goals>
      </guest>
    </match>
  </spieltag>
</root>
Das bietet dir einen sinnvollen Bezug zwischen den Daten.
 
hi
jo aber wie gesagt hab das ja per funktion aus einem array generieren lassen.
ABER :) hab gestern ne lösung per JSON gefunden. etz hab ich nur noch das problem mit den sonderzeichen. aber da muss ich mal kucken. eigentlich hätte ich gedacht das bei mir alles per utf8 läuft aber naja ... mal schauen :)

gruß
gunny
 
Zurück