Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  xml Attributabfrage

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  xml Attributabfrage (1647 mal gelesen)
therp
Mitglied



Sehen Sie sich das Profil von therp an!   Senden Sie eine Private Message an therp  Schreiben Sie einen Gästebucheintrag für therp

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für therp 10 Unities + Antwort hilfreich

Hallo Robert,

dann musst du vorher noch eine entsprechende Abfrage machen. Wie genau lautet denn die Fehlermeldung? Außerdem wäre vll. ein wenig mehr Code auch nicht verkehrt.

Wenn der Fehler deiner Beschreibung entspricht, dann würde ich sagen, dass .Length = Nothing oder "" ist. Demnach kannst du es nicht mit einem Integer vergleichen. Die Frage ist wieso? Dafür brauche ich aber mehr Code, um erkennen zu können, wie du an die Sache rangehst.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

therp
Mitglied



Sehen Sie sich das Profil von therp an!   Senden Sie eine Private Message an therp  Schreiben Sie einen Gästebucheintrag für therp

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für therp 10 Unities + Antwort hilfreich

Versuch es mal mit

Code:

If xmlknot.Attributes Is Not Nothing Then
...

oder

If xmlknot.Attributes.length <> Null Then
...


------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

therp
Mitglied



Sehen Sie sich das Profil von therp an!   Senden Sie eine Private Message an therp  Schreiben Sie einen Gästebucheintrag für therp

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von therp an!   Senden Sie eine Private Message an therp  Schreiben Sie einen Gästebucheintrag für therp

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für therp 10 Unities + Antwort hilfreich

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 ansehenKonstruktion, Visualisierung
therp
Mitglied



Sehen Sie sich das Profil von therp an!   Senden Sie eine Private Message an therp  Schreiben Sie einen Gästebucheintrag für therp

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz