Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  XMl Elementtext nimt Texte der Kindelemente auf

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 Elementtext nimt Texte der Kindelemente auf (1349 mal gelesen)
CAD-Erlerner
Mitglied
Student

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

Beiträge: 9
Registriert: 06.10.2009

CATIA V5 P3 R19

erstellt am: 28. Mrz. 2010 21: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

Hallo CAD.de User!

Mit einem VBA Makro habe ich ein xml Dokument eingelesen.

Nun habe ich das Problem, dass die Elementtexte der Elternelemente automatisch die Elementtexte der Kindelemente enthalten.

Wenn ich die xml Datei allerdings mit dem Internet Explorer öffne, dann enthalten die Elternelemente keinen Text, so wie es sein soll.

Gibt es eine Eigenschaft die ich setzen kann, damit die Texte der Elternelemente nicht automatisch die Texte der Kindelemente aufnehmen?

Ich verwende die Microsoft DOM Schnittstelle.

Gruß,

CAD-Erlerner

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

DanielFr.
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 29. Mrz. 2010 05: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 Nur für CAD-Erlerner 10 Unities + Antwort hilfreich

Hallo,

hast du erstens mal eine Beispiel *.xml Datei und zweitens den Code bzw. den Codeabschnitt. Scheint ein Programmierfehler zu sein bei mir geht´s wunderbar über die DOM

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

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

CAD-Erlerner
Mitglied
Student

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

Beiträge: 9
Registriert: 06.10.2009

CATIA V5 P3 R19

erstellt am: 29. Mrz. 2010 08:40    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


Anzeige_im_Treeview.jpg

 
Na klar!

Mit folgendem Code erstelle ich eine *.xml Datei:

Code:

Sub XML_Schreiben_Test()

Dim xml As New DOMDocument
xml.LoadXML "<Firma/>"

    Dim Mitarbeiter As IXMLDOMElement
    Set Mitarbeiter = xml.createElement("Mitarbeiter")
   
        Dim Person1 As IXMLDOMElement
        Set Person1 = xml.createElement("Person1")
           
            Dim Name As IXMLDOMElement
            Set Name = xml.createElement("Name")
            Name.Text = "Testname"
            Person1.appendChild Name
           
            Dim Abteilung As IXMLDOMElement
            Set Abteilung = xml.createElement("Abteilung")
            Abteilung.Text = "Testabteilung"
            Person1.appendChild Abteilung
           
      Mitarbeiter.appendChild Person1
       
    xml.DocumentElement.appendChild Mitarbeiter

xml.Save "C:\Test.xml"
End Sub


Die *.xml Datei sieht dann folgendermaßen aus (im Firefox):

Code:

<Firma>
  <Mitarbeiter>
    <Person1>
      <Name>Testname</Name>
      <Abteilung>Testabteilung</Abteilung>
    </Person1>
  </Mitarbeiter>
</Firma>

Die Datei lasse ich mir in einem Treeview ausgeben (ab der Ebene Mitarbeiter). Dazu benutze ich folgenden Code:

Code:

Dim ZSB As IXMLDOMElement
Set ZSB = xml.firstChild

Dim Knotenliste As IXMLDOMNodeList
Set Knotenliste = ZSB.childNodes

Dim Knoten0 As IXMLDOMNode
Dim Knoten1 As IXMLDOMNode
Dim Knoten2 As IXMLDOMNode

Dim Kind0 As Node
Dim Text0 As Node
Dim Kind1 As Node
Dim Text1 As Node
Dim Kind2 As Node
Dim Text2 As Node

'Treeview füllen:
For Each Knoten0 In Knotenliste
    Set Kind0 = TreeView1.Nodes.Add(, , , Knoten0.baseName)
        '1.Ebene
        For Each Knoten1 In Knoten0.childNodes
            Set Kind1 = TreeView1.Nodes.Add(Kind0, tvwChild, , Knoten1.baseName)
            Set Text1 = TreeView1.Nodes.Add(Kind1, tvwChild, , Knoten1.Text)
              '2.Ebene
                For Each Knoten2 In Knoten1.childNodes
                    If Knoten2.nodeType = NODE_ELEMENT Then
                    Set Kind2 = TreeView1.Nodes.Add(Kind1, tvwChild, , Knoten2.baseName)
                    Set Text2 = TreeView1.Nodes.Add(Kind2, tvwChild, , Knoten2.Text)
                    End If
                Next
        Next
Next


Das Ergebnis dieser Ausgabe siehst du im angehängten Bild. Es scheint so, als ob die Texte von "Name" und "Abteilung" zum Text des Elements "Person1" werden. Dies möchte ich vermeiden.

Auch wenn ich das Element "Person1" in die Watchlist setze besteht der Text aus den Texten der Kindelemente.

Wäre super wenn jemand meinen Fehler sieht oder eine andere Lösung findet.

Grüße,
CAD-Erlerner

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

DanielFr.
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 29. Mrz. 2010 10:46    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 CAD-Erlerner 10 Unities + Antwort hilfreich


Screenshot_XML.jpg


CreateXML.rar

 
Hallo  ,

Code:

Dim ZSB As IXMLDOMElement
Set ZSB = xml.firstChild

Dim Knotenliste As IXMLDOMNodeList
Set Knotenliste = ZSB.childNodes

Dim Knoten0 As IXMLDOMNode
Dim Knoten1 As IXMLDOMNode
Dim Knoten2 As IXMLDOMNode

Dim Kind0 As Node
Dim Text0 As Node
Dim Kind1 As Node
Dim Text1 As Node
Dim Kind2 As Node
Dim Text2 As Node

'Treeview füllen:
For Each Knoten0 In Knotenliste
    Set Kind0 = TreeView1.Nodes.Add(, , , Knoten0.baseName)
        '1.Ebene
        For Each Knoten1 In Knoten0.childNodes
            Set Kind1 = TreeView1.Nodes.Add(Kind0, tvwChild, , Knoten1.baseName)
        'Set Text1 = TreeView1.Nodes.Add(Kind1, tvwChild, , Knoten1.Text)
              '2.Ebene
                For Each Knoten2 In Knoten1.childNodes
                    If Knoten2.nodeType = NODE_ELEMENT Then
                    Set Kind2 = TreeView1.Nodes.Add(Kind1, tvwChild, , Knoten2.baseName)
                    Set Text2 = TreeView1.Nodes.Add(Kind2, tvwChild, , Knoten2.Text)
                    End If
                Next
        Next
Next


Die fett markierte Zeile ist verantwortlich für deinen Fehler. Die brauchst du nicht. Du erstellst doch den Eintrag schon eine Zeile zuvor. Dieser Root-Knoten (im TreeView Element) hat aber keinen Text sondern NUR Kinder. Hab dir erstens mal mein Textscript (ganze Library) und zweitens mal einen Screenshot angehängt 

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

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

CAD-Erlerner
Mitglied
Student

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

Beiträge: 9
Registriert: 06.10.2009

CATIA V5 P3 R19

erstellt am: 29. Mrz. 2010 11:24    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

Hi Daniel!

Danke, dass du dich so intensiv mit meinem Problem beschäftigst!

Leider benötige ich diese Zeile. Bei dem Beispiel handelt es sich um einen Ausschnitt aus einer großen xml Datei (habs der Übersicht zugute gekürzt)

Manche Elemente besitzen keine Unterelemente, dafür aber einen Text. Und diesen muss ich mit dieser Zeile ausgeben. Diese Elemente können aber durch das Makro wiederum Unterelemente bekommen. Deshalb kann ich die Schleife nicht prüfen lassen, ob Unterelemente vorhanden sind und falls ja -> Text nicht ausgeben. Wenn ich Elemente hinzufüge schreibt er mir übrigens deren Text auch in den Text des Mutterelements.

Hast du eine Vermutung, warum er die Texte in die höhere Ebene schreibt und wie man das unterbindet? Es scheint irgendwie ein Problem mit dem DOM oder VBA zu sein, da die gespeicherte xml diese Texte nicht aufweist, auch nach erneutem abspeichern nicht.

Wenn man die Zeile nicht auskommentiert dann habe ich auch mit deiner Form das gleiche Problem.

Gruß,
CAD-Erlerner

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

DanielFr.
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 29. Mrz. 2010 11:50    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 CAD-Erlerner 10 Unities + Antwort hilfreich

Hallo,

Zitat:
Manche Elemente besitzen keine Unterelemente, dafür aber einen Text. Und diesen muss ich mit dieser Zeile ausgeben. Diese Elemente können aber durch das Makro wiederum Unterelemente bekommen. Deshalb kann ich die Schleife nicht prüfen lassen, ob Unterelemente vorhanden sind und falls ja -> Text nicht ausgeben

Das verstehe ich nicht. Du kannst doch beim ändern der *.xml ein Ereignis auslösen das dir deinen TreeView neu aufbaut. Dann kannst du die Abfrage doch machen  . Wie sieht denn dein Ablauf aus? Also wie genau ist die Eingabe des Makros und was genau willst du damit erreichen bzw. was genau sollte hierbei rauskommen?

Zitat:
Wenn ich Elemente hinzufüge schreibt er mir übrigens deren Text auch in den Text des Mutterelements.

Hast du eine Vermutung, warum er die Texte in die höhere Ebene schreibt und wie man das unterbindet? Es scheint irgendwie ein Problem mit dem DOM oder VBA zu sein, da die gespeicherte xml diese Texte nicht aufweist, auch nach erneutem abspeichern nicht.


Das ist normal wenn du das DOMObject Modell einsetzt. Hier werden alle Unterelemente auch im Root-Element im Text geführt. Dies lässt sich nicht unterbinden. Du kannst aber die DOM Funktionalität auch selber programmieren (die *.xml Datei als *.txt Datei einlesen). Hier musst du aber die vorgefertigten Klassen alle nach programmieren und das ist ein großer Aufwand.

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

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

CAD-Erlerner
Mitglied
Student

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

Beiträge: 9
Registriert: 06.10.2009

CATIA V5 P3 R19

erstellt am: 29. Mrz. 2010 12:05    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

In dem Makro soll der Betrachter Anmerkungen zu einem Element aus der ersten Unterebene machen können.

Diese Anmerkung wird dann dem Element als Kindelement "Anmerkung" angehängt. Damit hat dann ein Element, welches vorher keine Unterelemente hatte (dafür aber einen Text mit benötigten Informationen) nun ein Unterelement "Anmerkung", dessen Text nun leider auch im Text des Mutterelements zu sehen ist. Das Unterelement schreibe ich sofort wieder an die richtige Stelle in die xml Datei.

Zum aktualisieren des Treeviews lese ich dann die neu abgespeicherte xml wieder ein und lasse sie mit der Schleife ausgeben. Das Element "Anmerkung" wird auch an der korrekten Position angezeigt, allerdings erscheint der Text wieder eine Ebene höher.

Wenn du sagst, dass das beim DOM mit den Texten so ist, dann sehe ich nur noch die Möglichkeit, die Texte der ersten Unterelemente nicht auszugeben und die Informationen eine Ebene nach hinten zu setzen. Ist dann nur noch ein optisches Problem. Hast du viellleicht noch einen anderen Ansatz? Das nachprogrammieren der Schnittstelle klammer ich jetzt mal aus 

Gruß,
CAD-Erlerner

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