Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-02-2006, 13:59   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
Wie macht man das... :: XPath Api ::

Olla Amigos!

Ich versuche gerade eine XML-Datei auszulesen. Mit der XPath Api gehts ja ganz gut und ich kann den ersten eintrag auslesen, aber wie kann ich die Daten des zweiten Knoten anzeigen?

Mein Code:

PHP-Code:
import mx.xpath.XPathAPI;
var 
XMLObj:XML = new XML();// Neues XML-Objekt anlegen
XMLObj.ignoreWhite true;// whitespace in XML ignorieren (z.B. CRLF etc)
XMLObj.onLoad xmlonload;//onLoad-Handler zuweisen
XMLObj.load("daten.xml");

var 
Eintrag 0

function 
xmlonload (success){
// XPathAPI ist eine statische Klasse. Die Methode selectNodeList gibt ein XMLNode-Array zurück
    
if (success) {//kein Fehler beim Laden aufgetreten
        
          
var liste:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist");
          var 
artistname liste[Eintrag].attributes.artistname;
        var 
artist_txt liste[Eintrag].firstChild.nodeValue;
        
        var 
liste:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist/link");
        var 
artist_link liste[Eintrag].firstChild.nodeValue;
        
        var 
liste:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist/kauflink");
        var 
artist_kauflink liste[Eintrag].firstChild.nodeValue;
        
        
btn_link.onRelease = function() {
            
getURL(artist_link);
        }
        
btn_kauflink.onRelease = function() {
            
getURL(artist_kauflink);
        }

        
ausgabe_txt.text artistname;
        
ausgabe_artist_txt.text artist_txt;
        
ausgabe_link.text artist_link;
        
ausgabe_kauflink.text artist_kauflink
    
    
}

und die XML:

PHP-Code:
<?xml version="1.0" encoding="UTF-8"?>
<liste>
   <artist artistname="Artist 1">Text ueber Kuenstler 1 ...
       <link>http://www.artist1.de</link>
       <kauflink>http://www.artist1.de/shop</kauflink>    
   </artist>
   <artist artistname="Artist 2">Text ueber Kuenstler 2 ...
          <link>http://www.bla</link>
          <kauflink>http://www.nuaber 2.de/shop</kauflink>
          
   </artist>   
</liste>
Ich möchte über einen Button, der den Wert von "var Eintrag = 0;" ändert alle Knoten durchsteppen können und die Anzeige jeweils updaten...
Vielen Dank für die Hilfe!

Geändert von headkit (13-02-2006 um 15:09 Uhr)
headkit ist offline   Mit Zitat antworten
Alt 13-02-2006, 15:40   #2 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
xervus,

sag mal - hast du mal die suche benutzt?
da gibt's schon jede menge infos zum thema xpath.... zum beispiel das hier

lass mich wissen, ob das hilft

greetz, elysian.
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 13-02-2006, 15:46   #3 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
schau dir mal das hier an

http://www.xfactorstudio.com/Actionscript/AS2/XPath/
_level0 ist offline   Mit Zitat antworten
Alt 13-02-2006, 16:01   #4 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
Zitat:
Zitat von _level0
schau dir mal das hier an
...sag ich doch
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 13-02-2006, 16:17   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
klar hab ich schon die "suche" benutzt. mach ich immer als erstes. so hab ich ja auch das skript gefunden und angepasst.
bloß in den threads steht immer nur drin, wie man ein XML einliest und dann nach eigenschaften sortiert ausgeben kann oder ähnliches.
leider steht dort nicht, wie man sozusagen datensätze durchsteppen kann und das ausgeben neu initiiert.

mein erster gedanke war, einfach die funktion "xmlonload" nach erhöhung der indexvariablen "Eintrag" neu ausführen zu lassen. aber irgendwie werden die daten nicht neu eingelesen bzw. ausgegeben.
headkit ist offline   Mit Zitat antworten
Alt 13-02-2006, 16:48   #6 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
XML Iterator... zweites suchergebnis...
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 13-02-2006, 16:55   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
der begriff "Iterator" wär mir da nie eingefallen...

soll heißen, man muss ide XML auf jeden fall ersteinmal komplett einlesen und kann dann nur im erzeugten array in flash auslesen?
headkit ist offline   Mit Zitat antworten
Alt 13-02-2006, 18:36   #8 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
nein, heisst das nicht.

sobald das xml-file einmal in flash geparst ist, kann man auf alle elemente mittels xml-methoden bzw. einer xpath-api (z.b. von xfactorstudio) zugreifen - überhaupt kein problem.

es zwingt dich niemand, das zeug in arrays zu packen! ein riesen vorteil der xmlstruktur ist z.b., dass die hierarchie der elemente durch die struktur selbst impliziert ist. da muss man schon mal nicht extra children oder parent mitverwalten.

allerdings schreckt die meisten wahrscheinlich die neue (komplizierte??) syntax von xpath ab - ist aber eigentlich gar nicht so schlimm.... solange die xml-daten nicht riieeesengroß sind, gibt's da auch keine performance-probleme im vergleich zu einer array lösung...

greetz, elysian.
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 13-02-2006, 19:11   #9 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
hm...
dir struktur mach mir ja wie gesagt keine probleme und auch das auslesen klappt.
nur ein durchsteppen der xml-knoten und eine daruffolgende erneute ausgabe der wechselnden inhalte krieg ich nicht hin.
wie müsste ich denn da rangehen?
headkit ist offline   Mit Zitat antworten
Alt 13-02-2006, 19:34   #10 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
naja, die subknoten eines knotens stehen im childNodes-array. das kannst du mittels einer schleife durchlaufen.
wenn du das ganze in eine intervall-funktion packst, kannst du schon alle x sekunden die einträge wechseln...
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 13-02-2006, 19:38   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
die ausgelesenen knoten sollen ja mittels eines buttons gewechselt werden.
headkit ist offline   Mit Zitat antworten
Alt 13-02-2006, 19:41   #12 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
dann halt keine intervall-funktion, sondern das nächste element onClick auf den button - ist ja dasselbe prinzip.
du musst dir nur den knoten merken, den du grade anzeigst. dann weisst du beim klick, dass es der nächste geschwister-knoten ist....
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 13-02-2006, 19:50   #13 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
wie gesagt, prinzipiell weiß ich das - nur der konkrete code ist mir nicht klar.
hast da nicht mal nen tip?
sowas?

PHP-Code:
on (release) {

// Knoten-Index ändern
Eintrag +=1;

//jeweiligen knoten neu auslesen           
var liste:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist");
var 
artistname liste[Eintrag].attributes.artistname;
var 
artist_txt liste[Eintrag].firstChild.nodeValue;
        
var 
liste:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist/link");
var 
artist_link liste[Eintrag].firstChild.nodeValue;
        
var 
liste:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist/kauflink");
var 
artist_kauflink liste[Eintrag].firstChild.nodeValue;

    
//soll die ausgabe erneuern und die neu ausgelesenen knoten darstellen
ausgabe_txt.text artistname;
ausgabe_artist_txt.text artist_txt;
ausgabe_link.text artist_link;
ausgabe_kauflink.text artist_kauflink

btn_link
.onRelease = function() {
            
getURL(artist_link);
}
btn_kauflink.onRelease = function() {
            
getURL(artist_kauflink);
}
    

zum durchsteppen...
das geht aber nicht.

vom prinzip müsste auf dem button liegen:
- ändere den "ausleseindex" (interne zu setzende variable)
- lese an der enstsprechednen stelle im XML-file den knoten aus
- stelle die ausgelesenen daten neu dar
headkit ist offline   Mit Zitat antworten
Alt 14-02-2006, 13:38   #14 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
hm, also es geht, wenn ich einen button mit dem script

PHP-Code:
btn_weiter.onRelease = function() {
    
Eintrag += 1;
    
nextFrame();

belege und im nächsten frame wieder auf das eingangsframe mit gotoAndStop(1); zurückführe.
dann werden die daten des nächsten knotens dargestellt.

gibts denn da keine bessere Lösung?
headkit ist offline   Mit Zitat antworten
Alt 14-02-2006, 15:48   #15 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
nun, habe jetzt - nach viel zu langem rumprobieren - rausgefunden, wie es besser geht:

PHP-Code:
import mx.xpath.XPathAPI;
var 
XMLObj:XML = new XML();// Neues XML-Objekt anlegen
XMLObj.ignoreWhite true;// whitespace in XML ignorieren (z.B. CRLF etc)
XMLObj.onLoad xmlonload;//onLoad-Handler zuweisen
XMLObj.load("daten.xml");

var 
Eintrag 0

var 
artistname = [];
var 
artist_txt = [];
var 
artist_link = [];
var 
artist_kauflink  = [];
var 
artist_audiocomment_status = [];
var 
artist_audiocomment_link  = [];

function 
xmlonload (success){
// XPathAPI ist eine statische Klasse. Die Methode selectNodeList gibt ein XMLNode-Array zurück
    
if (success) {//kein Fehler beim Laden aufgetreten
    
        
var a_kuenstler:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist");
        var 
anzahl_kuenstler a_kuenstler.length;
        var 
a_kuenstler_links:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist/link");
        var 
a_kauflinks:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist/kauflink");
        var 
a_comments:Array = XPathAPI.selectNodeList(this.firstChild"/liste/artist/audio");

        for (
i=0i<= anzahl_kuenstler 1i++) {
            
artistname[i] = a_kuenstler[i].attributes.artistname;
            
artist_txt[i] = a_kuenstler[i].firstChild.nodeValue;
            
artist_link[i] = a_kuenstler_links[i].firstChild.nodeValue;
            
artist_kauflink [i] = a_kauflinks[i].firstChild.nodeValue;
            
//trace(artist_kauflink[i]);
            
artist_audiocomment_status[i] = a_comments[i].attributes.audiostatus;
            
artist_audiocomment_link[i] = a_comments[i].firstChild.nodeValue;
        }
        
        
btn_link.onRelease = function() {getURL(artist_link[0]);}
        
btn_kauflink.onRelease = function() {getURL(artist_kauflink[0]);}
        
audiocomment_on(Eintrag);
        
        
ausgabe_txt.text artistname[Eintrag];
        
ausgabe_artist_txt.text artist_txt[Eintrag];
        
ausgabe_link.text artist_link[Eintrag];
        
ausgabe_kauflink.text artist_kauflink[Eintrag];
    
    }

function 
audiocomment_on(audioindexwert) {
    if (
artist_audiocomment_status[audioindexwert] == 1) {
        
btn_audiokommentar._visible 1;
        
btn_audiokommentar.onRelease = function() {getURL(artist_audiocomment_link[audioindexwert]);}

    } else if (
artist_audiocomment_status[indexwert] != 1) {
        
btn_audiokommentar._visible 0;
    }
        
}

function 
neuladen (indexwert){
    
ausgabe_txt.text artistname[indexwert];
    
ausgabe_artist_txt.text artist_txt[indexwert];
    
ausgabe_link.text artist_link[indexwert];
    
ausgabe_kauflink.text artist_kauflink[indexwert];
    
audiocomment_on(indexwert);
    
    
btn_link.onRelease = function() {getURL(artist_link[0]);}
    
btn_kauflink.onRelease = function() {getURL(artist_kauflink[0]);}


btn_weiter.onRelease = function() {
    
Eintrag += 1;
    
neuladen(Eintrag);

}

btn_back.onRelease = function() {
    
Eintrag -= 1;
    
neuladen(Eintrag);


man musste also erstmal arrays ausserhalb der schleifen definieren (wohl damit deren inhalte auch ausserhalb derselben abrufbar sind) udn diese dann innerhalb der schleifen füllen.
nun sind die inhalte der arrays durch buttons abrufbar.

sicher geht es nochmals besser...
ich wäre an einer optimierung schwer interessiert.

so long....
headkit 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 15:14 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele