abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

Wir schätzen Ihren Input!
Bitte nehmen Sie an der Umfrage zu Archicad 28 Startbildschirm und Lerninhalte/Schnell-Tutorials teil

Programmierung
Alles über Programmierung in GDL und Python

XML-Datei auslesen mittels GDL

Ma_Scht
Advocate
Howdy zusammen,
kann ich mit dem GDL ADD ON "XML" beliebige XML-Dateien einlesen oder nur die die durch den XML-Konverter gerattert sind?
Gruß Mario
11 ANTWORTEN 11
Anonymous
Nicht anwendbar
Nein beliebige, wenn sie xml-konform sind.
Hier wurde dazu einiges geschrieben, allerdings ist die Umsetzung nicht ganz einfach nachzuvollziehen.
http://gdl.graphisoft.com/tips-and-tric ... xml-add-on
Ma_Scht
Advocate
Hi Jochen,
danke f. d. AW.

Ich möchte mir die Strichstärke der Stifte-Sets als Kreissiagramm darstellen lassen.
Das habe ich mit dem GDL ADDON "TEXT" auch hinbekommen, aber da kann ich nur TXTs laden und muss immer die XML vorher umbenennen. Das nervt.
Nun dachte ich mir, ich nehme das "XML" ADDON.
Tricky!

Deinen Link hatte ich auch schon gefunden, aber da ich im XML nicht so bewandert bin, habe ich da ziemliche Verständnisprobleme.

Aber ich gehe mal davon aus, dass AC eine XML exportiert, XML-konform ist, wie Du schreibst, oder?

Gruß Mario
runxel
Legend
Interessante Idee, Mario.
Sieh dir den Code unten mal an, damit kannst du direkt die XML lesen und hast die Stifte in einem Array.
In der XML stehen ja einige witzige Dinge drin. Z.B. ließe sich auch auslesen, wann das Stiftset das letzte mal geändert wurde.


! Stiftset hat 255 Einträge
dim penwidth[255]

! Value inits
_ = ""
pos = ""
nodename = ""
nodevalue = ""
nodetype = ""
n_childnodes = 0
attrval = ""
attrname = ""


ch = open('xml', 'stifte.xml', 'rl')

! Initialen Positionsdeskriptor erhalten (= sind im Root)
r = input(ch, "NewPositionDesc", _, pos)
! pos @ AttributeFile

r = input(ch, "MoveToNode FromFirstChild Reg* ELEM", pos, nodename, nodevalue, nodetype)
! pos @ AttributeFile:RegisteredAttributes

r = input(ch, "NumberofChildNodes ELEM *", pos, n_childnodes)

! In den Node hineinbewegen
r = input(ch, "MoveToNode ToFirstChild", pos, nodename, nodevalue, nodetype)

! Durch Subnodes loopen, bis "Stifte" gefunden (Achtung, lokalisiert!)
for i=1 to (n_childnodes - 1)
r = input(ch, "MoveToNode FromNextSibling A* ELEM", pos, nodename, nodevalue, nodetype)

! Schauen, welchen Namen der Node hat (steht im Attribut "Type")
r = input(ch, "GetAttribute Type", pos, attrval, attrname)

if attrval = "Stifte" then
goto "break"
endif
next i
"break":

! Es wird immer die erste Stifttabelle ausgelesen
r = input(ch, "MoveToNode FromFirstChild PenTable ELEM", pos, nodename, nodevalue, nodetype)
! pos @ AttributeFile:RegisteredAttributes:Attributes[type=stifte]:PenTable

! Zum Übernode `Pens` hinein bewegen
r = input(ch, "MoveToNode FromFirstChild Pens ELEM", pos, nodename, nodevalue, nodetype)
! pos @ AttributeFile:RegisteredAttributes:Attributes[type=stifte]:PenTable:Pens

! In den Node hineinbewegen
r = input(ch, "MoveToNode ToFirstChild", pos, nodename, nodevalue, nodetype)
r = input(ch, "MoveToNode FromNextSibling Pen ELEM", pos, nodename, nodevalue, nodetype)
! pos @ 1. `Pen` Knoten

for i=1 to 255
! Breite des Stifts auslesen und speichern im Array
r = input(ch, "MoveToNode FromFirstChild Width ELEM", pos, nodename, nodevalue, nodetype)
r = input(ch, "MoveToNode ToFirstChild", pos, nodename, nodevalue, nodetype)

penwidth[i] = nodevalue

! Ebene wieder nach oben
r = input(ch, "MoveToNode ToParent", pos, nodename, nodevalue, nodetype)
r = input(ch, "MoveToNode ToParent", pos, nodename, nodevalue, nodetype)
! Zum nächsten Stift
r = input(ch, "MoveToNode FromNextSibling Pen ELEM", pos, nodename, nodevalue, nodetype)
next i
Lucas Becker | AC 27 on Mac | Graphisoft Insider Panelist | Author of Runxel's Archicad Wiki | Editor at SelfGDL | Developer of the GDL plugin for Sublime Text | My List of AC shortcomings & bugs | I Will Piledrive You If You Mention AI Again |

POSIWID – The Purpose Of a System Is What It Does /// «Furthermore, I consider that Carth... yearly releases must be destroyed»
Ma_Scht
Advocate
Hi shadow,
Danke Dir, ja, das ist die Marschrichtung in der ich z.Z. auch unterwegs bin.
Hat etwas gedauert, bis ich die Handhabung, besonders die Abfangung des Fehlers, falls <Description> leer ist, der XML kapiert habe.

Nun suche ich nach einem Weg den DATEINAMEN der eingelesenen XML in einen Parameter zu schreiben.

Mein Ansatz ist, dass ich einen BOOL antippe (und gleich wieder ausschalte), Wenn der 1 ist, dann wird die Datei neu eingelesen. Um eine NEUE ID zu erzeugen, lese ich Datum und Uhrzeit vom System aus aus und setze sie als Dateinamen. Der wird logischerweise NICHT gefunden, damit springt die DIALOG-Option an und ich kann auswählen.
Prima, ABER:
Dieser ausgewählte Dateiname soll in einen Paramter, damit ich auch morgen noch weiß was ich auswählte.
Das kriege ich NICHT hin.

Wenn Du, oder wer anders, dazu einen Hinweis habt, wie ich eine über
kanal = OPEN ("XML", dateiNameOPEN, "rd")
eingelesene Dateiname auslesen kann.
Das würde mir sehr weiter helfen.
Ich brauche "dateiNameOPEN" NACH der Wahl.
Aus der XML bekomme ich ihn NICHT, woher soll sie es auch wissen.

Gruß Mario
runxel
Legend
Das geht wohl nicht.
Lucas Becker | AC 27 on Mac | Graphisoft Insider Panelist | Author of Runxel's Archicad Wiki | Editor at SelfGDL | Developer of the GDL plugin for Sublime Text | My List of AC shortcomings & bugs | I Will Piledrive You If You Mention AI Again |

POSIWID – The Purpose Of a System Is What It Does /// «Furthermore, I consider that Carth... yearly releases must be destroyed»
Ma_Scht
Advocate
Danke Dir!
Schade, aber unlogisch.
In dem Moment, wo ich die Datei über DIALOG anklicke, müssten die Daten doch da sein.
runxel
Legend
Gerne berichtigen, wenn ich da falsch liege. Habs probiert – ohne Erfolg.
Ich dachte erst, dass der Dateiname eventuell in der "filename" Variable gespeichert wird, aber das ist nicht der Fall. Stattdessen bleibt die Variable unverändert.

Und ja, die Daten liegen sicherlich vor. Aber nicht zugreifbar im GDL. Hat sich wohl keiner gedacht, dass das mal nötig sein könnte.
Lucas Becker | AC 27 on Mac | Graphisoft Insider Panelist | Author of Runxel's Archicad Wiki | Editor at SelfGDL | Developer of the GDL plugin for Sublime Text | My List of AC shortcomings & bugs | I Will Piledrive You If You Mention AI Again |

POSIWID – The Purpose Of a System Is What It Does /// «Furthermore, I consider that Carth... yearly releases must be destroyed»
Frank Beister
Moderator
Ich hatte das in früheren Versionen schon hinbekommen, kann aber sein, dass das durch Beschränkungen im Parameterskript seit AC19 nicht mehr geht.
bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm
Ma_Scht
Advocate
Ich Iddi,
ich glaube ich habe es bald.
Der Schlüssel m.E. ist, dass man zuerst alle XML-Dateien in dem Verzeichnis ausliest.
Wärend man das macht, liest man einer Unterschleife über ein separates OPEN die GUID und das Stifte-Set aus
Stimmt beides, springt man aus der Schleife.