Ladon Geschrieben 2. August 2005 Geschrieben 2. August 2005 Hallo ich hab ein kleines Problem mit der folgenden Syntax. Sie ist zwar in groovy geschrieben womit sich wohl noch wenige auskennen, aber das ist in diesem Fall ja egal. Also ich hab diese Syntax: xml = new groovy.xml.MarkupBuilder() doc = xml.toys() { for (entry in stuff) person(name:entry.key) { for (thing in entry.value) item(name:thing.key; type=thing.value) } } Hab in der Aufgabe (Aus dem Internet) noch dies hier gegeben: def stuff = ['Eric':['car':'Mazda'] ] Also eine verschachtelte map... Es ist einfach ******e das dort nicht genau angegeben ist, wie genau ich es einsetzen muss... Ich muss ja eigentlich nur die einzelnen Begriffe hinzufügen um folgende XML - Ausgabe zu bekommen: <toys> <person> <name>Eric</name> <item> <name>car</name> <type>Mazda<</type> </item> ... </person> ... </toys> Aber da ich noch total neu auf in Sachen Programmieren bin, weiß ich nicht so richtig WO ich nun WAS einsetzen muss... Ich weiß dass es wohl echt lächerlich ist, aber ich glaub ich bin einfach zu blöd das zu verstehen..... Crying or Very sad Ach ja, die Seite auf der das Beispiel ist: http://www.artima.com/weblogs/viewpost.jsp?thread=116723 Vielen Danke für eure Hilfe! Ladon Zitieren
beetFreeQ Geschrieben 2. August 2005 Geschrieben 2. August 2005 Ich kenne die Sprache bisher zwar auch nicht, aber für mich sieht es folgendermassen aus: Das def muss einfach vor die Schleifen und du baust die Liste deinen Vorstellungen entsprechend auf. Das Objekt Stuff besitzt pro Personen-Key noch den Key car und der hat einen Value - in dem Beispiel besitzt die Person Eric ein Key "car" mit dem Value "Mazda" Wenn du das jetzt erweitern willst, würd ich sagen, du musst einfach kommagetrennt weitere Personen mit Car und dem entsprechenden Wert angeben: def stuff = ['Eric':['car':'Mazda'],'Jane':['car':'Ford']] Genauso könntest du wohl auch weitere Keys pro Person hinzufügen: def stuff = ['Eric':['car':'Mazda','teddy':'Poh'],'Jane':['car':'Ford','teddy':'tigger']] Ob's funzt, kann ich dir aber leider nicht sagen - war reine Interpretationssache Zitieren
Ladon Geschrieben 2. August 2005 Autor Geschrieben 2. August 2005 Vielen Dank. Das hilft mir schon mal weiter das ganze zu verstehen. Nur nochmal das zu der Liste. Die Liste muss ich ja eigentlich so stehen lassen wie sie ist, oder? Ich meine, ich baue ja das ganze, damit er mir diese Werte aus dem Objekt Stuff entnimmt. Oder hab ich das falsch verstanden? Dieser Statz steht auch noch dabei: The names of the elements are specified as part of the code. To specify attributes, you use the @ prefix on a name, as in @type. That XML data set the results looks like this: Ich weiß aber net in welchem Zusammenhang der zu diesem Beispiel steht... (sorry, aber ich bin halt echt noch Anfänger...) Aber Deine Erklärung dazu ist echt super! Vielen Dank!! Zitieren
beetFreeQ Geschrieben 2. August 2005 Geschrieben 2. August 2005 Welche Liste meinst du? Die Liste der Daten, die du ins XML eintragen willst? Die kannst du relativ frei aufbauen - je nach Tiefe der Verschachtelung musst du die Schleifen nur halt erweitern etc. Ich erläutere dir nochmal kurz die Syntax, wie ich sie verstanden habe: xml = new groovy.xml.MarkupBuilder() So wird ein XML-Dokument erzeugt doc = xml.toys() { Dem XML-Dokument wird der Hauptknoten toys zugewiesen. Alles, was zwischen den {-Klammern steht, gehört in den Hauptknoten hinein. for (entry in stuff) Eine Schleife durchläuft jeden Datensatz in der untersten Ebene (Entry) der Map namens Stuff person(name:entry.key) { In der oben deklarierten Schleife wird für jeden Key in der untersten Ebene ein Knoten namens "person" erzeugt, der wiederum einen Knoten "name" enthält. der Knoten "name" bekommt zudem als Inhalt den Key des Datensatzes zugewiesen, auf dem wir uns in dem SChleifendurchlauf befinden - also z.B. "Eric". Die {-Klammer beinhaltet wieder alle Objekte, die innerhalb des "person"-Knotens eingefügt werden sollen for (thing in entry.value) Jetzt wird auf dem Knoten Person noch eine Schleife ausgeführt, die für jeden Key auf der zweiten Ebene (thing - z.B. "car") durchgeführt wird. item(name:thing.key; type=thing.value) Hiermit wieder wieder ein Knoten erzeugt, der als Knotennamen (type) den thing.value (z.B. "car") und als Wert (name) den thing.key (z.B. "Mazda") besitzt. } hier ist der Inhalt des Knotens "person" zuende } hier ist der Inhalt des Knotens "toys" zuende So wird das dann immer weiter aufgebaut. Ich glaub, mit der Zeile "The names of the elements are specified as part of the code" ist gemeint, daß die Namen der XML-Knoten einfach so als Code eingegeben werden können - wie z.B. hier: person(name:entry.key) oder hier item(name:thing.key; type=thing.value) Da wird der Knoten "person" angelegt und bekommt gleich einen Unterknoten mit dem Namen "name" und dem Wert aus entry.key - und das ist in der Liste die unterste Ebene (Entry) und der Key im Beispiel "Eric". Wenn du jetzt Attribute ( wie z.B. <person name="Eric">) haben willst, musst du ein @-Zeichen vor die Bezeichnung des Attributs schreiben. Das müsste also so funktionieren: person(@name:entry.key) oder hier item(name:thing.key; @type=thing.value) in Person war "name" ohne @ ein Knoten, mit @ ein Attribut. Im zweiten Beispiel, wird ohne @ ein Knoten mit einer Bezeichnung (type) und einem Wert (name) angelegt - mit @ wird ein Attribut mit der Bezeichnung (@type) und einem Wert (name) angelegt. Zitieren
Ladon Geschrieben 2. August 2005 Autor Geschrieben 2. August 2005 Hey, also das ist ja echt klasse wie du das erklärt hast!!!! Das hab jetzt sogar ICH (als total blutiger Anfänger) verstanden!! Also wirklich nochmal vielen Dank das du dir so viel Zeit genommen hast!! Danke!!!!! Ladon Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.