Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-12-2006, 23:44   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2002
Ort: latente matrix
Beiträge: 119
XML 2 Object

Hallo Jungs und Mädels,

ich hab leider einen kleinen Hänger, was das umsetzten meines Gedankenganges angeht.

Ich möchte folgendes durch eine rekursiv aufgerufende Methode erreichen:

Beispiel 1: XML-Datei
PHP-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml
-stylesheet href="http://www.gimmixx.de/css/rss.css" type="text/css" media="screen"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" >
    <channel>
    <title>GIMMIXX NEW MEDIA | Was tut sich</title>
    <link>http://www.gimmixx.de</link>
    <description>News und Updates zu aktuellen Arbeiten von GIMMIXX NEW MEDIA</description>
    <copyright>Copyright 2005</copyright>
    <generator>GIMMIXX Easy Systems 2.0</generator>
    <language>de</language>
    <docs>http://www.gimmixx.de/rss2/</docs>
    <managingEditor>glasmachers@gimmixx.de</managingEditor>
    <webMaster>glasmachers@gimmixx.de</webMaster>
        <item>
            Screendesign und Logodesign für das IPGO
        </item>
        <item>
            Zeit für Illugrafie
        </item>
        <item>
            Webseitenlaunch 3D Capital AG
        </item>
        <item>
            Webdesign für EBCON AG - Europäische Verbraucherberatung
        </item>
        <item>
            Flyerdesign für Streetdance-Trainer &quot;Kai Lippmann&quot;
        </item>
    </channel>
</rss>

Diese XML-Datei möchte ich in folgender Struktur als Object erhalten (was momentan schon möglich ist):
PHP-Code:
obj['rss']['channel']['item'][0]  // Screendesign und Logodesign für das IPGO
obj['rss']['channel']['item'][1]  // Zeit für Illugrafie 


Beispiel 2: XML-Datei
PHP-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml
-stylesheet href="http://www.gimmixx.de/css/rss.css" type="text/css" media="screen"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" >
    <channel>
    <title>GIMMIXX NEW MEDIA | Was tut sich</title>
    <link>http://www.gimmixx.de</link>
    <description>News und Updates zu aktuellen Arbeiten von GIMMIXX NEW MEDIA</description>
    <copyright>Copyright 2005</copyright>
    <generator>GIMMIXX Easy Systems 2.0</generator>
    <language>de</language>
    <docs>http://www.gimmixx.de/rss2/</docs>
    <managingEditor>glasmachers@gimmixx.de</managingEditor>
    <webMaster>glasmachers@gimmixx.de</webMaster>
        <item>
            <title>Screendesign und Logodesign für das IPGO</title>
            <link>http://www.gimmixx.de/</link>
            <pubDate>Thu, 06 Oct 2005 22:32:16 +0000</pubDate>
            <description>Für das IPGO (Institut für Psychotherapie, Gesundheitswissenschaften und Organisationsentwicklung GmbH) wurden von GIMMIXX im Auftrag einer befreundeten lübecker Programmierschmiede Screendesign und Logodesign geliefert....</description>
            <content:encoded><![CDATA[<p>Für das IPGO (Institut für Psychotherapie, Gesundheitswissenschaften und Organisationsentwicklung GmbH) wurden von GIMMIXX im Auftrag einer befreundeten lübecker Programmierschmiede <a title="Screendesign" href="http://www.gimmixx.de/lexikon/s/screendesign/">Screendesign</a> und Logodesign geliefert.</p>]]></content:encoded>
        </item>
        <item>
            <title>Zeit für Illugrafie</title>
            <link>http://www.gimmixx.de/</link>
            <pubDate>Fri, 07 Oct 2005 17:41:28 +0000</pubDate>
            <description>Es gibt doch nichts schöneres als sich an einsamen Freitagnachmittagen der Muße hinzugeben. Einfach grafisch draufloslegen und sehen was am Ende herauskommt. In dieser freien Bildkomposition wurden fotografische Elemente und Illustration vermischt....</description>
            <content:encoded><![CDATA[<p>Es gibt doch nichts schöneres als sich an einsamen Freitagnachmittagen der Muße hinzugeben. Einfach grafisch draufloslegen und sehen was am Ende herauskommt. In dieser freien Bildkomposition wurden fotografische Elemente und Illustration vermischt.</p>]]></content:encoded>
        </item>
        <item>
            <title>Webseitenlaunch 3D Capital AG</title>
            <link>http://www.3D-capital.ag</link>
            <pubDate>Sun, 21 Aug 2005 18:58:27 +0000</pubDate>
            <description>GIMMIXX NEW MEDIA launcht die Webseite für das schweizer Unternehmen 3D Capital AG. Das Webdesign basiert auf validem XHTML und CSS mit barrierefreien Ansätzen....</description>
            <content:encoded><![CDATA[<p>GIMMIXX NEW MEDIA launcht die Webseite für das schweizer Unternehmen 3D Capital AG. Das Webdesign basiert auf validem <a title="XHTML - Extensible Hypertext Markup Language" href="http://www.gimmixx.de/lexikon/x/xhtml/">XHTML</a> und <a title="CSS - Cascading Style Sheets" href="http://www.gimmixx.de/lexikon/c/css-cascading-style-sheets/">CSS</a> mit <a title="Barrierefreiheit im Internet" href="http://www.gimmixx.de/lexikon/b/barrierefrei/">barrierefreien</a> Ansätzen.</p>]]></content:encoded>
        </item>
        <item>
            <title>Webdesign für EBCON AG - Europäische Verbraucherberatung</title>
            <link>http://www.ebcon.net</link>
            <pubDate>Thu, 09 Jun 2005 08:27:24 +0000</pubDate>
            <description>Das schweizer Unternehmen Ebcon präsentiert sich im Internet in einem neuen Gewand. GIMMIXX NEW MEDIA übernahm die Frontend Programmierung in validem XHTML und CSS mit barrierefreien Ansätzen....</description>
            <content:encoded><![CDATA[<p>Das schweizer Unternehmen Ebcon präsentiert sich im Internet in einem neuen Gewand. GIMMIXX NEW MEDIA übernahm die <a title="Frontend Programmierung" href="http://www.gimmixx.de/lexikon/f/frontend-programmierung/">Frontend Programmierung</a> in validem <a title="XHTML - Extensible Hypertext Markup Language" href="http://www.gimmixx.de/lexikon/x/xhtml/">XHTML</a> und <a title="CSS - Cascading Style Sheets" href="http://www.gimmixx.de/lexikon/c/css-cascading-style-sheets/">CSS</a> mit <a title="Barrierefreiheit im Internet" href="http://www.gimmixx.de/lexikon/b/barrierefrei/">barrierefreien</a> Ansätzen.</p>]]></content:encoded>
        </item>
        <item>
            <title>Flyerdesign für Streetdance-Trainer &quot;Kai Lippmann&quot;</title>
            <link>http://www.gimmixx.de/</link>
            <pubDate>Mon, 13 Jun 2005 19:56:42 +0000</pubDate>
            <description>Für den Streetdance-Trainer und Moderator &quot;Kai Lippmann&quot; wurde ein Promotion-Flyer im Illustrationsstyle designt....</description>
            <content:encoded><![CDATA[<p>Für den Streetdance-Trainer und Moderator &quot;Kai Lippmann&quot; wurde ein Promotion-Flyer im Illustrationsstyle designt.</p>]]></content:encoded>
        </item>
    </channel>
</rss>

Diese XML-Datei möchte ich in folgender Struktur als Object erhalten:
PHP-Code:
obj['rss']['channel']['item'][0]['title']  // Screendesign und Logodesign für das IPGO
obj['rss']['channel']['item'][1]['title']  // Zeit für Illugrafie 

Leider scheitere ich an diesem Vorhaben, mit einer Methode zwei verschiedene XML-Strukturen ein- und korrekt auszulesen.

Folgender Code ist vorhanden:


Derzeitige Methode zum XML-Parsen
PHP-Code:
XML.prototype.XMLParse = function(nodedata) {
    
    if (
node == null) {
        
        var 
node this.firstChild;
    }
    
    for (var 
0node.childNodes.length; ++x) {
    
        if (
node.childNodes[x].nodeName != null) {
            
            if (
data[node.childNodes[x].nodeName] != null && !(data[node.childNodes[x].nodeName] instanceof Array)) {
                    
                
data[node.childNodes[x].nodeName] = [data[node.childNodes[x].nodeName]];
            }
            
            if (
node.childNodes[x].firstChild.nodeValue != null) {

                if (
data[node.childNodes[x].nodeName] instanceof Array) {
                    
                    
data[node.childNodes[x].nodeName][data[node.childNodes[x].nodeName].length] = node.childNodes[x].firstChild.nodeValue;
                
                } else {
                    
                    
data[node.childNodes[x].nodeName] = node.childNodes[x].firstChild.nodeValue;
                }
                
            } else {
                
                if (
data[node.childNodes[x].nodeName] instanceof Array) {
                    
                    
data[node.childNodes[x].nodeName][data[node.childNodes[x].nodeName].length] = {};
                    
                } else {
                
                    
data[node.childNodes[x].nodeName] = {};
                }
            }
        }
        
        if (
node.childNodes[x].childNodes.length 0) {
            
            
this.XMLParse(node.childNodes[x], data[node.childNodes[x].nodeName]);
        }

    }
}; 

Aufruf der Methode:
PHP-Code:
var _Xml = new XML(); 

_Xml.ignoreWhite true;         
_Xml.load('xmlfile.xml'); 
_Xml.onLoad = function (success) { 
        
    if (
success) { 
            
        
this.XMLParse(null_global.xmlDataArray); 
    } 
}; 


Schlussendlich wäre ich sehr glücklich,
wenn mir jemand bei diesem Vorhaben helfen könnte.


Vielen Dank,
Robert Engelhardt
__________________
freiheit ist ein mythos

Geändert von womstar (07-12-2006 um 23:49 Uhr)
womstar ist offline   Mit Zitat antworten
Alt 07-12-2006, 23:54   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
die 'mutter' aller rekursiven xml-parser
http://www.seibsprogrammladen.de/fra...lgorithmen/XML
XML parsen

_xml.nodeName kann man ja auch unbekannter weisse verarbeiten
und alle attribute mit je einem for (var a in _xml.attributes) { ...
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 07-12-2006, 23:58   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2002
Ort: latente matrix
Beiträge: 119
Danke für Deine Antwort.

Diese Sache habe ich mir auch schon zu Gemüte geführt.
Mich irritierte aber diese Zeile:
case 'a': case 'b': case 'c':

Welche ja meines achtens vorbestimmte Node-Namen verarbeitet.
Aber Du meinst, dies kann auch unbestimmt geschehen?
__________________
freiheit ist ein mythos

Geändert von womstar (07-12-2006 um 23:59 Uhr)
womstar ist offline   Mit Zitat antworten
Alt 08-12-2006, 00:04   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ist ja auch nur ein beispiel und deshalb schrieb ich ja auch extra: _xml.nodeName kann man ja auch unbekannter weisse verarbeiten

schmeiss deinen blick z.b. eine etage tiefer zu XML zu Array.
lass da das switch weg. zumindestens case 'a': case 'b': case 'c': durch default: ersetzen, bzw. ergänzen.
je nach belieben. ist eine möglichkeit, eine von vielen.

letztendes ist ein XML halt kein array und ein array kein XML. sonst wär's ja das selbe ;-)
die unterschiede in den griff zu bekommen, ist jedermanns/-fraus eigene sache.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (08-12-2006 um 00:11 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 08-12-2006, 00:13   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2002
Ort: latente matrix
Beiträge: 119
Mh .. kannst Du mir ein Beispiel zeigen, welches die Object-Struktur besitzt die ich versuche zu erreichen? Die Struktur die ich mit Deiner Funktion erreiche ist momentan noch sehr chaotisch.
__________________
freiheit ist ein mythos
womstar ist offline   Mit Zitat antworten
Alt 08-12-2006, 00:36   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ungetestet, aber so in etwa
Code:
function fXML_parsen(_xml) {
	do {
		switch (_xml.nodeName) {
		case 'channel' :
			_aktuell = [];
			fXML_parsen(_xml.firstChild);
			rss.push(_aktuell);
			break;
		case 'webMaster' :
			_items = [];
			fXML_parsen(_xml.firstChild);
			_aktuell[_xml.nodeName] = _items;
			break;
		case 'item' :
			_items.push(_xml.firstChild.nodeValue);
			break;
		default :
			_aktuell[_xml.nodeName] = _xml.firstChild.nodeValue;
			break;
		}
	} while (_xml=_xml.nextSibling);
}
//
var rss = [];
fXML_parsen(_xml.firstChild);
[edit]
ach so, das 2. xml
entweder die tags dort umbenennen title & link wären ja sonst doppelt. ich bevorzuge eindeutige namen.
oder dafür eine neue routine erstellen, wenn item if (_xml.hasChildNodes()) { ... hat
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (08-12-2006 um 01:15 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 08-12-2006, 00:55   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2002
Ort: latente matrix
Beiträge: 119
Vielen Dank!

Vielleicht sollte ich aber erwähnen, dass es mir um eine möglichst flexible Methode geht um XML-Datein einzulesen. Sprich, ich möchte nirgends im Code Node-Namen definieren. Also eine Methode, die unabhängig ist von der vorliegenden Struktur.

Beispiel:

PHP-Code:
rss:{
    
channel:{
    
        
description:bla,

        
item:[
            
0:bla,
            
1:bla
            
]
        }
    }

Oder

PHP-Code:
rss:{
    
channel:{
    
        
description:bla,

        
item:[
            
0:{

                
title:bla,
                
description:bla
            
},
            
1:{

                
title:bla,
                
description:bla
            
}
            ]
        }
    }


Wie gesagt, meine obere Methode macht dies schon, aber nur bist zum ersten Beispiel.
__________________
freiheit ist ein mythos

Geändert von womstar (08-12-2006 um 01:02 Uhr)
womstar ist offline   Mit Zitat antworten
Alt 08-12-2006, 01:11   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ich denke, ich habe dir jetzt genügend beispiele gegeben. in die eine so wie in die andere richtung.
und die variante in #6 kommt auch mit einem minimum an vorgaben aus.
wenn du das xml vollkommen wertfrei einliesst, dann 'weiss' deine programmierung nachher auch nicht, was sie wo anzeigen soll.

zum glück gibt es keine funktion für alles. sonst wären wir programmierer ruckzuck arbeitslos ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (08-12-2006 um 01:16 Uhr)
hgseib 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 13:48 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele