| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Jan 2010
Beiträge: 9
| Problem mit Namespaces in XML und e4x
Hallo alle zusammen, ich komme mit den Namespace in XML nicht klar. Meiner Meinung nach kommt da etwas raus was nicht rauskommen sollte, aber natürlich vermute ich erst mal meine Dummheit als einen Bug. Ich habe folgendes mxml. Wichtig dabei sind die zwei <name> Elemente. Eines liegt im Default-Namespace, das andere in dem Namespace "ns". Code: <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768"
creationComplete="test()">
<fx:Script>
<![CDATA[
private var employees:XML =
<employees xmlns:ns="bla">
<employee ssn="123-123-1234">
<name first="John" last="Doe"/>
<address>
<street>11 Main St.</street>
<city>San Francisco</city>
<state>CA</state>
<zip>98765</zip>
</address>
</employee>
<employee ssn="789-789-7890">
<ns:name first="Mary" last="Roe"/>
<address>
<street>99 Broad St.</street>
<city>Newton</city>
<state>MA</state>
<zip>01234</zip>
</address>
</employee>
</employees>;
public function test():void
{
trace("###########");
trace(employees..name);
trace("###########");
var ns:Namespace = employees.namespace("ns");
var qn:QName = new QName(ns, "name");
trace(employees.employee.child(qn));
trace("###########");
}
]]>
</fx:Script>
</s:Application> Bei trace(employees..name) sollte meiner Meinung nach zumindest ein <name> Element gefunden werden. Wird es aber nicht, es wird gar nichts gefunden. Bei trace(employees.employee.child(qn)) sollte genau ein Element gefunden werden, es werden aber beide <name> gefunden Hier die trace-Ausgabe: ########### ########### <name first="John" last="Doe" xmlns:ns="bla"/> <ns:name first="Mary" last="Roe" xmlns:ns="bla"/> ########### Mich interessiert vor allem wie ich das Element <ns:name> herausfiltern kann. Wenn ich den Namespace entferne werden bei trace(employees..name) dann auch beide Elemente gefunden, so wie es sein sollte: <name first="John" last="Doe" xmlns:ns="bla"/> <name first="Mary" last="Roe" xmlns:ns="bla"/> Für mich macht das irgendwie keinen Sinn warum es sich mit dem Namespace so verhält wie es das tut. Für jeden Hinweis bin ich sehr dankbar. |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Auf direkte Cilds kann man mit :: zugreifen, so ganz hab ich das mit den Namespaces auch noch nicht gerafft, ärger mich auch immer wenn irgendwelche Interfaces ( z.B. Facebook), sowas zurück geben. Mal ein Beispiel wie ich es verwende (elegantere Wege habe ich noch nicht gefunden): PHP-Code: |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Jan 2010
Beiträge: 9
|
Die Syntax mit :: bringt mir leider nichts, da ich die Struktur des zu verarbeitenden XML nicht kenne. Ich muss also mit child(), descendants() oder attribute() arbeiten. Das ist ja eigentlich kein Problem, aber es kommt halt nicht das raus was meiner Meinung nach rauskommen sollte. Ich habe gestern die halbe Nacht damit verbracht diverse Schreibweisen auszuprobieren (aus Verzweiflung), aber nichts hat funktioniert. Bin gespannt, ob noch jemand eine Idee hat. |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Jan 2010
Beiträge: 9
|
Hast du das tatsächlich getestet? Wenn ich das mache, dann kommt bei mir genau dasselbe raus wie bei employees.employee.child(qn) nämlich: <name first="John" last="Doe" xmlns:ns="bla"/> <ns:name first="Mary" last="Roe" xmlns:ns="bla"/> Das ist ja genau der Grund warum ich so ratlos bin. Ich bin nämlich fest der Meinung, dass die Syntax richtig ist, aber das was rauskommt falsch ist. Da das aber eine recht zentrale Sache ist, weigere ich mich aber auch beharrlich es als Bug anzusehen. |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Jan 2010
Beiträge: 9
|
Also wenn ich folgenden Code habe: var ns:Namespace = employees.namespace("ns"); var qn:QName = new QName( ns, "name"); var list:XMLList = employees.descendants(qn); dann müsste doch eigentlich nur <ns:name first="Mary" last="Roe" xmlns:ns="bla"/> gefunden werden, weil ich ja schließlich nur im Namespace ns suche. Aber es wird zusätzlich auch der Default-Namespace gefunden. Bitte korrigiere mich wenn ich damit falsch liege. |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Jan 2010
Beiträge: 9
|
Erst mal danke für Hilfe. Also so wie ich das mit dem Namespace verstanden habe, wird mit dem Attribut xmlns:ns="bla" lediglich die prinzipiell vorhandenen Namespaces definiert. Ich habe aber das obige Beispiel etwas vereinfacht und das Attribut nun nur noch in dem Element drin wo es gebraucht wird. Trotzdem kommt das selbe raus! Code: <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768"
creationComplete="test()">
<fx:Script>
<![CDATA[
private var employees:XML =
<employees>
<name first="John" last="Doe" />
<ns:name first="Mary" last="Roe" xmlns:ns="bla" />
</employees>;
public function test():void
{
trace("###########");
trace(employees.name);
trace("###########");
var ns:Namespace = new Namespace("ns", "bla");
var qn:QName = new QName(ns, "name");
trace(employees.child(qn));
trace("###########");
}
]]>
</fx:Script>
</s:Application> ########### ########### <name first="John" last="Doe"/> <ns:name first="Mary" last="Roe" xmlns:ns="bla"/> ########### lautet und nicht wie ich vermuten würde: ########### <name first="John" last="Doe"/> ########### <ns:name first="Mary" last="Roe" xmlns:ns="bla"/> ########### |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Tja manchmal lernt man am meisten wenn man anderen hilft. Das Thema hat mich dann jetzt doch gewurmt. Scheinbar muss dein Stammelement eine xmlns definition haben, dann gehts: PHP-Code: |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Jan 2010
Beiträge: 9
|
Also vielen Dank, du hast recht. Ich hatte das zwar auch schon gehabt aber wenn ich xmlns="blub" eingebaut hatte, dann kam gar nichts mehr (ob das daran lag, dass ich blubb (mit zwei b) geschrieben habe?). Nee, Spaß beiseite. Ich weiß jetzt warum nichts ausgegeben wurde als ich xmlns="blub" eingebaut hatte und das ist wichtig für andere und kann anderen Stunden des Suchens ersparen: Die trace()-Ausgabe hat schamlos gelogen. Verlasst euch nicht auf das trace() sondern verwendet den Debugger! Wenn ich das Ergebnis in einer Variablen abspeichere und mir die im Debugger anschaue steht das richtige drin. Vielen Dank für deine Mithilfe! Geändert von gregorw (08-01-2010 um 18:53 Uhr) |
| | |
| | #12 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 11.856
|
Mein du hier: ActionScript:
__________________ github: https://github.com/floriansalihovic/L18nExample <florian xmlns:speaker="www.beyondtellerrand.com/ffk11/speakers_sessions" xmlns:trainer="http://www.beyondtellerrand.com/ffk11/workshops" /> and @ g+ |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| e4x, namespace, xml |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Neues XML-Objekt mit Namespaces | derRaab | ActionScript 3 | 1 | 08-01-2010 15:19 |
| XML und Namespaces | Ridicule | ActionScript 2 | 3 | 29-08-2006 10:16 |
| Namespaces | [je] | ActionScript 3 | 15 | 20-02-2006 17:35 |
| xml namespaces | maxx444 | Flash 8 | 0 | 06-09-2005 13:33 |
| Namespaces in XML anlegen? | Agamemnon74 | ActionScript 1 | 2 | 27-10-2004 13:48 |