| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: xml-Editor einfach nur schrecklich (2983 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 18. Jun. 2013 15:56 <-- editieren / zitieren --> Unities abgeben:
Hat jemand von Euch schon mal eine xml-datei in eine excel-datei umgewandelt. Ein Beispiel sieht folgendermassen aus. Zwar kosieren einige xml-Editoren rum. Habe keine Lust alle durchzuprobieren. Die xml-Datei sieht wie in der Beilage aus - Ich bräuchte eine csv- oder xls-datei ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 18. Jun. 2013 17:25 <-- editieren / zitieren --> Unities abgeben:
Code: (defun Get-XML-file (/) (if (setq doc (vlax-create-object "MSXML.DOMDocument")) (progn (vlax-invoke-method doc 'Load "C:\\Temp\\CutFillReport.xml") (setq data (vlax-get-property doc 'xml)) ;(vlax-dump-object doc) ) ) )
Ein andere Thread verhalf mir ersteinmal ein Grundwerkzeug zu schaffen, die Datei einzulesen. Für mich stellt sich als nächstes die Frage, wie ich mit den Daten hantieren soll. Im Idealfall hätte ich gern eine Assoziationsliste typ, aus
Code: <Volume name="Tomt B5 Bergschakt" type="full" CutFactor="1.000" FillFactor="1.000" Area="864.07" Cut="1.95" Fill="2151.26" Net="2149.32<Fill>"/>
Code: (( "<Volume name=" . "Tomt B5 Bergschakt") (" type=" . "full") ("CutFactor=" . 1.000) ("FillFactor=" . 1.000) ("Area=" . 864.07") ("Cut=" . 1.95) ("Fill=" . 2151.26) ("Net=" . 2149.32)
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 18. Jun. 2013 18:27 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, damit würdest du die XML ziemlich vergewaltigen da dies eine Datenbank ist und mit was kann man schöner Arbeiten als mit einer solchen. Ich denke dir fehlt eher das Wissen wie du an die entsprechenden Daten kommst bzw. sie auswerten kannst. Dann ist nämlich alles ein Kinderspiel . In XML könntest du dir alles auflisten oder nach bestimmten Knoten oder Attributen suchen. Wenn du einmal den Bogen darin raus hast ist es leicht damit zu arbeiten. Und ich vermute mal das du nicht einfach nur die Daten nach Excel bringen willst. Hier könntest du dich mal einlesen http://www.w3schools.com/xpath/default.asp Die dort aufgeführten Befehle und Beispiele kannst du soweit fast alle verwenden. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 18. Jun. 2013 20:30 <-- editieren / zitieren --> Unities abgeben:
Ja gut, damit werde ich mich mal beschäftigen... Meine XML ist jetzt nicht so umfangreich. Ich vermute, die Liste irgendwie mit der gängigen Listenverarbeitung aufzureiben. Den letzten Beitrag hatte ich nur halt so verstanden, dass mir schon eine fertige asso-liste aus COM geliefert wird ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 18. Jun. 2013 23:54 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 19. Jun. 2013 12:00 <-- editieren / zitieren --> Unities abgeben:
Ups, da hab ich ja völlig falsch gelegen mit meiner Mutmassung - Entschuldigung. Naja eben pure Unwissenheit, ich bin zwar immer davon ausgegangen, dass mit xml-dateien Daten transportieren, aber nicht dass hier ein eigenes Framework dahinter steckt (Java). Wenn es das bei Windows installiert gibt, warum haben dann nicht alle Produkte Zugriff darauf. Man kann zwar eine xml mit Excel beispielsweise öffnen, aber bekommt nicht den gleichen style geboten, wie im Editor. Zwar kann per drag/drop einfach die Daten nach Excel importieren - schätze ich aber mal dass das dumm ist. Weil wie eben gesagt xml da mehr bietet. Ich habe von einer Erweiterung zu html gelesen, der code ist doch aber rein java oder nicht? ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 19. Jun. 2013 12:42 <-- editieren / zitieren --> Unities abgeben:
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 19. Jun. 2013 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: nur ist die Umsetzung vllt stehen geblieben
Eventuell in Office aber in C# .Net höchst gebräuchlich. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 19. Jun. 2013 14:37 <-- editieren / zitieren --> Unities abgeben:
Geliebtes NET muss sich noch etwas gedulden, ich bin noch nnicht soweit... Sorry ich habe mal wieder etwas zusammengewurschtelt, wobei ich zwar weiss was passiert, aber nicht, wie ich alle Informationen rauskriegen kann. Kann mir einer von den Spitzentüftlern weiterhelfen, wie ich mich in der xml-struktur weiter runterhangeln kann ? Der code stammt aus GrandNation Russland, den ich auf cadtutor aufgegriffen habe und meinen Bedürfnissen angepasst habe.
Code: ;;===================================== (defun read_by_tags (xml_doc tag / lst) (setq adr_elems (vlax-invoke-method xml_doc 'getelementsbytagname tag)) (setq leng (vlax-get-property adr_elems 'length)) (setq cnt 0) (while (< cnt leng) (setq tmp (vlax-get-property (vlax-get-property (vlax-get-property adr_elems 'Item cnt) 'firstchild ) 'text ) ) (setq lst (cons tmp lst)) (setq cnt (1+ cnt)) ) (cons tag (list (reverse lst))) );;===================================== (defun C:Demo(/ ;;; adr_elems info srt_elems ssp_elems xml_doc ) (vl-load-com) (setq xml_doc (vla-getinterfaceobject (vlax-get-acad-object)"msxml.domdocument")) (while (not (eq :vlax-true(vlax-get-property xml_doc 'async)));wait for application accessibility ) (vlax-invoke-method xml_doc 'load "C:/temp/CutFillReport.xml") (setq info (mapcar (function (lambda (x)(read_by_tags xml_doc x))) (list "AeccCutFillReport" "GeneratedTime" "User" "Drawing" "VolumeSummary" "Volume" ??? );etc. <-- add all of the desired tags here ) ) (princ info) ;;;(if xml_doc (vlax-release-object xml_doc )) ;; --> work with 'info' here, use 'foreach' or 'mapcar' for that (princ) )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 19. Jun. 2013 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Dann sag nochmal eben wohin die Reise geht. Möchtest du einzelne Daten auswerten oder willst du eine Liste erhalten? ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 19. Jun. 2013 15:18 <-- editieren / zitieren --> Unities abgeben:
Danke für die schnelle Rückmeldung Als erstes hänge ich mal eine Beispiel xml an. Es geht um eine Massenberechnung die ich in Civil vorgenommen habe, wobei ich einmal die Volumen zwischen Urgelände und Terrassgel. (entspricht Jordschakt) als nächtes habe ich die Volumen zwischen Berggelände und Terrassgel. ermittelt (entspicht Bergschakt) Das Ergebnis kann man in Civil als xml exportieren. Jetzt finde ich, dass man nur eine dämliche Tabelle bekommt (die Meinung revidierde ich, aufgrund Falschannahme) Wünschenswert wäre, wenn ich die bisherige "Info" -Assoc-Liste komplettieren und alle Volumen rauszufiltere... Ist das mit viel Aufwand verbunden. Ich müsste halt nur wissen, wie ich mich in der Struktur bis auf die Volumen runterhangle. Bis zum "VolumeSummary" konto bin ich ja schon mal gekommen ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 19. Jun. 2013 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 19. Jun. 2013 16:06 <-- editieren / zitieren --> Unities abgeben:
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 19. Jun. 2013 17:05 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Also ich habe dir mal was zusammen gebastelt. Du musst noch den Pfad anpassen. Hier werden dir aus den Volume Knoten alle Area Werte ausgegeben. Ich denke das wird dich erst einmal ein Stück weiter bringen, ansonsten weist du ja wo du uns findest . Code: (setq DateiXML (findfile "c:\\lisp\\CutFillReport-Kopia.xml")) ;;; Pfad anpassen !!!(if (and (findfile DateiXML) (setq Doc (vlax-create-object "MSXML2.DOMDocument.3.0")) (not (vlax-put Doc "async" 0)) (= (vlax-invoke Doc "load" DateiXML) -1) (= (vlax-get Doc "readyState") 4) ) (progn (setq Knoten (vlax-invoke-method Doc "selectNodes" "//Volume")) ;;; Hier werden alle Volume Knoten gewählt (while(setq XML-Teil (vlax-invoke-method Knoten "nextNode")) (setq Mein-Wert;;; Hier wird der wert von Area ermittelt. (vlax-get-property (vlax-invoke-method XML-Teil "selectSingleNode" "@Area" ) "text" ) ) (princ Mein-Wert) (terpri) ;;;Hier wir der Wert ausgegeben. )) )
------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 19. Jun. 2013 17:58 <-- editieren / zitieren --> Unities abgeben:
Einsame spitze, Wenn ich XML-Teil ispezier erhalte ich die komplette Zeile ... Code: (vlax-get-property (vlax-invoke-method XML-Teil "selectSingleNode" "@Area" ) "text" )
Woher kennst du den Schlüssel "selectSingleNode" und "@Area" ich würde gerne noch die Bezeichnung für den Volumenwert ausgeben wenn ich xml-teil inspeziere sehe ich die komplette Zeile
Code: <Volume name="Tomt B5 Bergschakt" type="full" CutFactor="1.000" FillFactor="1.000" Area="864.07" Cut="1.95" Fill="2151.26" Net="2149.32<Fill>"/>
Dein code gibt mir die Fläche aus. Wäre es möglich die Zeile zu komplettieren dass ich also am Beipiel
Code: "Tomt B5 Bergschakt" "Cut="1.95" "Fill="2151.26"
rausbekomme Vielen Dank für deine super Arbeit ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 20. Jun. 2013 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo also für Zitat: Woher kennst du den Schlüssel "selectSingleNode" und "@Area
An die Eigenschaften und Methoden kommt man wie immer mit z.B. (vlax-dump-object XML-Teil t ) Um an dein gewünschtes Ergebnis zu kommen entferne einfach das Code: (vlax-get-property (vlax-invoke-method XML-Teil "selectSingleNode" "@Area" ) "text" )
und ersetze es durch das
Code: (list (vlax-get-property (vlax-invoke-method XML-Teil "getAttributeNode" "name") "Text" ) (vlax-get-property (vlax-invoke-method XML-Teil "getAttributeNode" "Cut") "xml" ) (vlax-get-property (vlax-invoke-method XML-Teil "getAttributeNode" "Fill") "xml" ))
------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 20. Jun. 2013 15:38 <-- editieren / zitieren --> Unities abgeben:
Danke, du hast mir ein grosses Rätsel gelöst - hätte ich eigentlich selbst drauf kommen können - häufige Blockaden lassen mich den Wald vor lauter Bäumen nicht sehen. Aber langsam steige ich dahinter, wie ich mit visual zu hantieren habe. ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |