Ausgabe mehrerer gleichnamiger Felder mit Fix

Moin,

wenn ich mehrere Felder mit der gleichen Bezeichnung anlegen möchte, wird nur das jeweils letzte ausgegeben. Ich vermute, dass der xml-encoder die Ursache ist, bei z.B. JSON als Ausgabeformat klappt das. Beispiel:

add_field("test", "1")
add_field("test", "2")

Hätte jemand eine Idee?
Danke schon mal und viele Grüße
Manuela

Hi Manuela,

wenn ich deine Frage richtig verstehe, willst du wissen wie man mehrere Felder mit dem gleichen Feldnamen erzeugt, richtig?

add_field("test1","wert1")
add_field("test1","wert2")

Bei der Stream-basierten Morph konnte man ja einfach zusätzliche Elemente an die Datenschlange ergänzen. Das geht beim Record-basierten Ansatz von Catmandu und Metafacture Fix nicht so.

In Metafacture Fix (aber auch in Catmandu) ist add_field sowie die meisten Funktionen die ein neues Feld erzeugen, „destruktiv“ soll heißen es überschreibt die bestehenden Werte.

Will man hingegen wiederholte Felder erzeugen muss man etwas anders vorgehen.

Wiederholte Felder werden immer als Listen behandelt, das hat u.a. dem Vorteil, dass man einzelne Positionen in einer Liste manipulieren kann. Anstelle das Feld einfach neu zu schreiben, muss du deswegen eine Position in einer Liste ergänzen. Dafür kannst du die „Array-Wildcard“, $append benutzen. Das ergänzt ein Feld zu einer Liste, und falls bisher keine Liste existiert, erzeugt es eine Liste.

add_field("test2.$append","wert3")
add_field("test2.$append","wert4")

So kannst du beim Rausschreiben, wiederholte Felder erzeugen.
Aus deiner bisherigen Arbeit mit Metafacture weißt du wahrscheinlich, dass du für „echte“ Arrays in JSON oder YAML noch einen Array-Marker brauchst []


add_field("test3[].$append","wert5")
add_field("test3[].$append","wert6")

Hab das auch mal im Playground abgebildet.

Deinen Vermutung zwischen encode-xml und encode-json verstehe ich gerade noch nicht, aber vielleicht kannst du mir da noch helfen.

Hi Tobias,

das hat super funktionioniert, vielen Dank!
Ich meine, mit encode-json hätte es mal ohne append geklappt, aber dann vertue ich mich da. Der Wald vor lauter Bäumen und so…

Viele Grüße
Manuela

Vielleicht auch noch wichtig/interessant:

Metafacture Fix interpretiert „reinkommende“ Elemente mit „Array“-Marker [] als Arrays auch, wenn diese Felder nur einmal existieren.