Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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 ;)

Geschrieben

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!!

Geschrieben

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.

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...