Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Syntax - Problem

Empfohlene Antworten

Veröffentlicht

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

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

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

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.