XML Datei einlesen und aktualisieren

Stiff

Mitglied
Hallo Community,
ich habe eine XML Datei erstellt, die ich in einer DataGrid Komponente ausgebe. Die XML-Datei wird jedoch ständig aktualisiert. Also es ändern sich Werte. Lasse halt den Film immer wieder von vorne beginnen, um zu erreichen, dass die XML Datei neu eingelesen wird. Das klappt bis hier hin noch ganz gut.

Ich würde nun aber gerne die Spalten sortieren. Das klappt auch noch, aber nur so lange bis die XML Datei neu eingelesen wird. Dies geschiet ca. jede Sekunde einmal.

Irgendwie komm ich nicht weiter und weiß auch nicht ob ich auf dem richtigen Weg bin. Gibt es eine Möglichkeit, jede Änderung der XML Datei live in einem DataGrid darzustellen, ohne dabei auf Sachen wie sortieren und scrollen zu verzichten?
 
Hi,

wie wird die XML-Datei eingelesen und der Komponente zugewiesen?

Ein Neustart des kompletten Films ist sicher unnötig, aber ggf. musst Du die Werte "manuell" aktualisieren.

Poste bitte einmal Deine .fla und die dazugehörige XML-Datei.

Gruß
.
 
Also ich habe zwei Movieclips:

Der erste sieht so aus und besteht aus 2 Bildern, um die Aktualisierung auszuführen:

PHP:
var entry = new Array();
var xm = new XML();
xm.ignoreWhite = true;
xm.load(_parent.textfelder.urlname);
var dg_data1:Array = new Array();
xm.onLoad = function() {
obj = this.firstChild; // meincontent-Tag
}
for (var i=0; i<obj.childNodes.length; i++) {
	child = obj.childNodes[i];
	Nummer.text = child.attributes.Nummer;
	dg_data1.push ({
		Raum:child.attributes.Nummer, 
		Temperatur:child.attributes.Temperatur, 
		Sollwert:child.attributes.Sollwert, 
		Schiebung:child.attributes.Schiebung,
		KLVentiel:child.attributes.KLVentiel,
		HZVentiel:child.attributes.HZVentiel
		});
	Temperatur.text = child.attributes.Temperatur;
}
_parent.textfelder.dg_etage.dataProvider = dg_data1;

Der Zweite so:

PHP:
var urlname = "raumliste.xml";
var startButton:mx.controls.Button;
var startButton1:mx.controls.Button;
var urlloader:Object;
var urlloader1:Object;
urloader = new Object();
urloader1 = new Object();
urloader.click = function(evtObj){
//  trace("The " + evtObj.target.label + " button was clicked");
  urlname = "raumliste.xml";
}
urloader1.click = function(evtObj){
//  trace("The " + evtObj.target.label + " button1 was clicked");
  urlname = "raumliste1.xml";
}
startButton.addEventListener("click", urloader);Y
startButton1.addEventListener("click", urloader1);Y
trace (urlname);

var dg_data2:Array = new Array();
//var dg_etage:mx.controls.DataGrid;
this.createClassObject(mx.controls.DataGrid, "dg_etage", 10 );
dg_etage.setSize(450, 300);
//dg_etage.sortableColumns = true;
//dg_etage.getColumnAt(1).sortOnHeaderRelease = false;
dg_etage.selectable = false;
dg_etage.editable = false;
dg_etage.vScrollPolicy = false;
//dg_etage.height = "160";
first_run.onLoad = "1" ;
if ( first_run == "1" ) {
dg_etage.addColumn("Raum");
dg_etage.addColumn("Temperatur");
dg_etage.addColumn("Sollwert");
dg_etage.addColumn("KLVentiel");
}

var myListener = new Object();
myListener.headerRelease = function(event) {
    trace("column " + event.columnIndex + " header was pressed");
};
dg_etage.addEventListener("headerRelease", myListener);

Das XML so:

PHP:
<?xml version"1.0"?>
<data>
	<Raum Nummer="103" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="50 %" HZVentiel="0 %" />
	<Raum Nummer="104" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="51 %" HZVentiel="0 %" />
	<Raum Nummer="105" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="51 %" HZVentiel="0 %" />
	<Raum Nummer="105" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="51 %" HZVentiel="0 %" />
	<Raum Nummer="105" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="51 %" HZVentiel="0 %" />
	<Raum Nummer="105" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="51 %" HZVentiel="0 %" />
	<Raum Nummer="105" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="51 %" HZVentiel="0 %" />
	<Raum Nummer="105" Temperatur="21,5 °C" Sollwert="22,5 °C" Schiebung="0 °C" KLVentiel="51 %" HZVentiel="0 %" />
</data>

Bitte nicht an den startButton und startButton1 aufhängen. Meine abendliche Überlegung führte dahin, dass ich selber über Buttons sortiere, indem ich vorsortiert XML Dateien erzeuge und diese direkt auslese.

Vielen Dank im voraus.
 
Zuletzt bearbeitet:
Hi,

ich möchte Dich bitten, die komplette .fla zu posten, da ich nicht weiß, wie sich diese Clips in Relation zu einander befinden - und zum Herumprobieren bei dem Versuch, die Datei nachzubauen, habe ich keine Zeit. ;)

Gruß
.
 
Hi,

leider passt in der Datei kaum etwas zum anderen (z.B. ließt Du die XML-Datei in einer Schleife immer wieder ein, statt das nur zu tun, wenn Du neue Daten anfordern willst - zudem wird die Variable mit dem Pfad zur XML-Datei erst gesetzt, wenn das Laden schon abgeschlossen ist ...). Ich werde die komplette Übergabe der Daten neu schreiben müssen - bitte hab etwas Geduld, denn ich kann noch nicht sagen, wann ich dazu komme.

Gruß
.
 
Ej, das finde ich echt nen Hammer. Hätte ich jetzt garnicht erwartet. Ich lese die XML in einer Schleife, weil ich immer die aktuellen Daten brauche. Diese ändern sich ziemlich häufig (~jede Sekunde oder häufiger).

Da ich echt kein Profi bin und mir das alles aus der Doku zusammengebaut habe, gibt es von meiner Seite momentan leider keine elegantere Lösung. Ist es denn Grundsätzlich möglich, eine "Live Verbindung" zu einer XML Datei herzustellen, so dass ich jede Änderung mitbekomme?
 
Hi,

ohne entsprechenden Server (der Flash Media Server bietet z.B. dauerhafte Socket-Verbindungen) bleibt Dir nichts anderes übrig, als die Datei in gewissen Intervallen neu einzulesen.

Machbar sollte die Aktualisierung schon sein, aber ich muss mich erst einmal ein wenig einlesen, da ich ansonsten nicht mit den mitgelieferten Komponenten arbeite (ich erstelle lieber eigene; eine DataGrid-Komponente habe ich auch im Portfolio, aber die Option, Spalten zu sortieren ist noch nicht implementiert ...).

Gruß
.
 
So, ich bin nun auf meiner Suche auf eine XMLSocket Verbindung gestossen. Leider finde ich keinen freien und vor allem aktuellen Socker Server. Hat jemand einen Tipp für mich?
 
Hallo Leude,
also ich habe mir nun einige Socket Server angeschaut und bin letztendlich bei RED5 Media Server stehen geblieben. Hat jemand Erfahrungen mit dem Teil. Habe eine Verbindung zum Server aufgebaut und auch Daten abgerufen bzw. in meinem Flash Movie ausgegeben. Leider habe ich es bisher nicht geschafft, die Daten in meinem geliebten Data Grid LIVE auszugeben. Das heißt, dass alle Änderungen automatisch erkannt und aktualisiert werden, ohne die Tabelle (data Grid) neu aufzubauen. Bitte nochmals um eure Hilfe. Mir würde schon reicehn, wenn mir jemand sagt, dass das was ich vor habe überhaupt in der Form möglich ist. Nicht dass ich mich hier in etwas verrenne und unmenschlich viel Zeit vergolde.
 
Zurück