Autor
|
Thema: xml Attributabfrage (1647 mal gelesen)
|
therp Mitglied
Beiträge: 23 Registriert: 31.08.2010 Precision M4600 Intel(R) Core™ i5-2520M CPU @ 2.50GHz 8145 MB NVIDIA Quadro 2000M Microsoft Windows 7 Enterprise Service Pack 1 Catia V5 R19 SP09 HF069
|
erstellt am: 13. Mai. 2013 11:48 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hoffe ich bin für mein Anliegen im richtigen Forum gelandet, da das Problem nicht unbedingt Catiaspezifisch ist. Allerdings habe ich kein passenderes gefunden. Ich lese Informationen aus xml-Dateien mittels VBA und der Microsoft xml v6.0 Bilbiothek aus. Ich möchte für Knotenelemente ermitteln, ob diese Attribute haben oder nicht. Ich habe es erstmal mit knoten.attributes.length > 0 versucht, das Problem ist allerdings, sobald der Knoten gar kein Attribut hat läuft das Skript in einen Fehler. Es gibt ja für Unterknoten generell die Möglichkeit mit knoten.haschildnodes zu ermitteln, ob Kindknoten existieren. Für Attribute funktioniert das ganze allerdings leider nicht. Ich hoffe ich konnte mich klar ausdrücken. Vielen Dank erstmal! MfG Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 13. Mai. 2013 12:16 <-- editieren / zitieren --> Unities abgeben: Nur für therp
|
therp Mitglied
Beiträge: 23 Registriert: 31.08.2010 Precision M4600 Intel(R) Core™ i5-2520M CPU @ 2.50GHz 8145 MB NVIDIA Quadro 2000M Microsoft Windows 7 Enterprise Service Pack 1 Catia V5 R19 SP09 HF069
|
erstellt am: 13. Mai. 2013 12:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Rick, ich suche in den Knoten nach bestimmten Attributen. Wenn Attribut 1 und 2 vorher definierte Namen haben, sollen weitere Daten aus Kindelementen ausgelesen werden. Hier mal der Code: Code: Sub durchsuchen(xmlStartknoten As msxml2.IXMLDOMNode, att1 As String, att2 As String)Dim xmlknot As msxml2.IXMLDOMNode For Each xmlknot In xmlStartknoten.childNodes 'If xmlknot.Attributes.Length <> "Nothing" Then 'funktioniert leider nicht, da .length ein Wert vom Typ "long" ist. 'If xmlknot.Attributes.Length <> "" then 'funktioniert auch nicht -> type mismatch 'If xmlknot.Attributes.Length <> Nothing then 'funktioniert auch nicht -> invalid use of object If xmlknot.Attributes.Length > 0 Then 'hier kommt der Fehler s.u. If xmlknot.Attributes.Item(0).text = att1 And xmlknot.Attributes.Item(1).text = att2 Then Set xmlknot2 = xmlknot' xmlknot2 ist eine public-variable. Der Knoten wird zwischengespeichert und in einer anderen Prozedur weiter untersucht. End If End If If xmlknot.hasChildNodes Then 'für Kindknoten auch überprüfen durchsuchen xmlknot, att1, att2 End If 'End If Next End Sub
att1 und att2 sind die Benennungen der Attribute, die aus einer übergeordneten Prozedur übergeben werden Wenn ich es mit .attributes.length > 0 versuche, kommt die Fehlermeldung "object variable or with block not set", sobald der Knoten keine Attribute hat. MfG Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 13. Mai. 2013 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für therp
|
therp Mitglied
Beiträge: 23 Registriert: 31.08.2010 Precision M4600 Intel(R) Core™ i5-2520M CPU @ 2.50GHz 8145 MB NVIDIA Quadro 2000M Microsoft Windows 7 Enterprise Service Pack 1 Catia V5 R19 SP09 HF069
|
erstellt am: 13. Mai. 2013 13:44 <-- editieren / zitieren --> Unities abgeben:
hmmm also ... is not nothing funktioniert auch nicht. mit ... <> null kommt zwar keine Fehlermeldung, aber er überspringt den if-Block auch, wenn Attribute existieren. Logisch wäre m.E. ein Befehl wie .hasattributes aber das gibt es ja leider nicht. Im Localsfenster steht folgendes, wenn kein Attribut existiert. Expression Value Type xmlknot IXMLDOMNode/IXMLDOMCDATASection -Attributes nothing IXMLDOMNamedNodeMap Wenn ich mit If xmlknot.Attributes <> Nothing Then abfrage, kommt allerdings auch die Fehlermeldung "invalid use of object" und If xmlknot.Attributes.value <> Nothing Then gibts leider auch nicht... MfG Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
therp Mitglied
Beiträge: 23 Registriert: 31.08.2010 Precision M4600 Intel(R) Core™ i5-2520M CPU @ 2.50GHz 8145 MB NVIDIA Quadro 2000M Microsoft Windows 7 Enterprise Service Pack 1 Catia V5 R19 SP09 HF069
|
erstellt am: 14. Mai. 2013 16:45 <-- editieren / zitieren --> Unities abgeben:
Ich habe leider noch keine Lösung für das Problem gefunden. Ich habe die Befürchtung, dass das gar nicht funktioniert, da ich im Netz auch nichts hilfreiches finde. Sollte ich die Frage in einem anderen Forum stellen bzw. verschieben lassen? MfG Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 15. Mai. 2013 14:27 <-- editieren / zitieren --> Unities abgeben: Nur für therp
Hat das Ding nicht die Methode blubb.HasAttributes()? Oder versuch IsObject(blubb.Attributes) oder etwas vergleichbares. IsArray() könnte es auch sein. Dann müsste es Not blubb.Attributes is Nothing heißen, etc. Es ist auf jeden Fall keine CATIA-Frage. Wenn Du keine Methode findest (und es gibt sicher eine in der Doku), dann kannste immer noch On Error Resume Next verwenden. Ich hatte nur nicht geantwortet, da das Problem recht trivial aussieht, ich aber auch nicht die Doku suchen möchte. :-D Ist Length überhaupt die richtige Methode? Von welchem Typ ist denn blubb.Attributes()? ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Konstrukteur (m/w/d) Sondermaschinenbau | Leidenschaft für technologischen Fortschritt ausleben? Dabei sein, wenn Innovationen Wirklichkeit werden? Bei FERCHAU suchen wir Menschen mit dem gleichen Anspruch: als Expert:innen für unseren Kunden. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte. Als Berufseinsteiger:in unterstützt du deine Kolleg:innen mit neuen Ideen und festigst dein Wissen durch praktische Erfahrungen.... | Anzeige ansehen | Konstruktion, Visualisierung |
|
therp Mitglied
Beiträge: 23 Registriert: 31.08.2010 Precision M4600 Intel(R) Core™ i5-2520M CPU @ 2.50GHz 8145 MB NVIDIA Quadro 2000M Microsoft Windows 7 Enterprise Service Pack 1 Catia V5 R19 SP09 HF069
|
erstellt am: 15. Mai. 2013 17:01 <-- editieren / zitieren --> Unities abgeben:
Also .hasattributes hab ich schon versucht. Habe da keine Variante gefunden, die klappt. War auch mein erster Gedanke, da es .haschildnodes ja auch gibt... .attributes ist anscheinend vom Typ IXMLDOMNamedNodeMap. attributes.length existiert halt erst dann, wenn Attribute vorhanden sind. Sind keine vorhanden, kann man das also auch nicht abfragen und er rennt in einen Fehler. Im Grunde ist das Problem auch trivial. Ich wundere mich selbst, dass ich keine Lösung finde. Irgendwie bekomme ich sowas eigentlich immer hin :-D Naja, ich habe das Problem erstmal überbrückt aber das ist irgendwie auch gepfuscht... Zur Not werde ich dann On error resume next verwenden. Trotzdem erstmal vielen Dank an euch! edit: "if Not xmlknot.Attributes Is Nothing then" ist die Lösung! Vielen Dank für den Schubser in die richtige Richtung! [Diese Nachricht wurde von therp am 15. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |