Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  vb.net und xml- Dateien

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  vb.net und xml- Dateien (1384 mal gelesen)
noctis79
Mitglied
Konstrukteur/ CAD-Administrator


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

Beiträge: 164
Registriert: 07.10.2009

erstellt am: 17. Jan. 2012 20:52    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,
mal wieder ein ganz "spezielles"  Problem...
Vorhaben:
Wir haben uns dazu entschlossen, in Zukunft FluidDraw für Pneumatikpläne einzusetzen.
Dieses soll in PSP integriert werden (nur die Datei- Verwaltung)...
Da es keine direkte Schnittstelle zwischen PSP und FluidDraw gibt, sollen die Attribute des
Schriftfelds über den Jobserver geändert werden. Dafür müssen in der FD- Datei (eine xml- Datei)
nur einige Werte geändert werden.
Beim "nur" komm ich aber nicht weiter...

Hier ein Auszug aus der XML- Datei:

Code:
<?xml version="1.0" encoding="utf-8" ?>
<fluidtools2 creator="FluidDraw Professional" version="5.2.321.0" file-id="5416BB9E48CE36CF7C2E3DAF">
<section type="properties" name="19" page-number="3">
  <drawing-size width="288.21989343584556" height="400.49385664405611" unit="mm" landscape="true" />
  <basic-length M="1.5" unit="mm" />
<!-- Unit conversion: 1 = 0.166666666666667 M = 0.25 mm = 0.0098425197 in
  -->
  <drawing-frame src="\frm\Frame_A3.circ" inherit="true" />
<page-division row-tab-stops="16.8789533008425 201.473854439042 386.068755577241 570.663656715441 755.258557853641 939.853458991841 1124.44836013004" col-tab-stops="17.6296633102486 212.881399578136 408.133135846024 603.384872113912 798.636608381799 993.888344649683 1189.14008091757 1384.39181718546 1579.64355345335" inherit="true">
  <row-descriptions>A B C D E F</row-descriptions>
  <col-descriptions>1 2 3 4 5 6 7 8</col-descriptions>
  </page-division>
  <designation-format-strings inherit="true" fluidic="[%IN%-][%CT%][%CM%][:%CN%]" electric="[=%IN%][+%LC%][-%CM%][:%CN%]" user-defined="[%CM%]" frame-fluidic="false" frame-electric="false" frame-user-defined="false" frame-free-input="false" />
  <detailed-designation installation-id="2" />
<user-data>
  <attribute name="Benennung" value="Weg- und zeitabängige Steuerung" />
  <attribute name="Teilenummer" value="19" />
  </user-data>
  </section>
</fluidtools2>

Jetzt soll unter <user-data> das Attribut Benennung und Teilenummer geändert werden (der Wert davon)...
Im Moment lese ich die Datei als txt- Datei ein, suche mir den String und ersetze diesen durch
einen neuen (Streamreader/ writer und RegularExpressions)

Code:
  Sub Replace(ByVal Repl_String As String, ByVal Repl_by As String, ByVal temp As String)


        Dim Dat_String As New IO.StreamReader(temp & "FluidDraw_temp.txt")
        Dim Datei As String
        Datei = Dat_String.ReadToEnd

        For Each match As Text.RegularExpressions.Match In System.Text.RegularExpressions.Regex.Matches(Datei, "attribute name=" & _
                     """" & Repl_String & """" & " value=" & _
                                                              """.*""")

            Datei = Datei.Replace(match.Value, "attribute name=" & _
                                                 """" & Repl_String & """" &
                                                " value=" & _
                                                  """" & Repl_by & """")

        Next

        Dat_String.Close()

        Dim Datei_new As New IO.StreamWriter("C:\work\FluidDraw_temp.txt", False)
        Datei_new.Write(Datei)
        Datei_new.Close()

    End Sub


Im Netz habe ich jetzt einige Beispiele für die Bearbeitung von xml- Dateien gefunden, werde daraus aber leider nicht schlau...

Kann mir einer von euch weiterhelfen?!?

[Diese Nachricht wurde von noctis79 am 17. Jan. 2012 editiert.]


K, hier mal mein Ansatz... Nicht schön aber selten....

Code:
  Sub Main()

        Dim x0 As New Xml.XmlDocument()
        Dim child As Xml.XmlNode
        Dim childa As Xml.XmlAttribute

        x0.Load("C:\1.xml")

        For Each child In x0.DocumentElement.ChildNodes
            For Each childa In child.Attributes
                If childa.Value = "properties" Then
                    For Each j As Xml.XmlNode In child.ChildNodes
                        If j.Name = "user-data" Then
                            For Each ja As Xml.XmlNode In j.ChildNodes
                                If ja.Name = "attribute" Then
                                    Dim attri As Xml.XmlAttributeCollection = ja.Attributes
                                    If attri.ItemOf(0).Value = "Benennung" Then
                                        attri.ItemOf(1).Value = "test"
                                    End If
                                End If
                            Next
                        End If
                    Next
                End If
            Next
        Next
        x0.Save("C:\test.xml")
    End Sub


[Diese Nachricht wurde von noctis79 am 17. Jan. 2012 editiert.]

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

Patrick Weber
Mitglied
Konstruktionstechniker, Admin


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

Beiträge: 657
Registriert: 20.11.2006

Win7 Pro SP1 64Bit
HP Z230, Core i5, 8GB RAM, nv Quadro K600
Creo Elements/Direct 19.0 M010
ModelManager 19.0 M010
clisp,VB.net,VBA,AHK,php,javascript

erstellt am: 17. Jan. 2012 22:58    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 noctis79 10 Unities + Antwort hilfreich

Keine Ahnung, welchen Einschränkungen ihr mit Inventor unterliegt, aber vielleicht funkioniert das mittels XPath auf verständlichere Weise:

Code:
Imports System.Xml
Imports System.Xml.XPath

Sub Main()
Try
Dim XmlStorageFile As String = "c:\test.xml"
Dim XmlStoreDoc As New XmlDocument
XmlStoreDoc.Load(XmlStorageFile)
Dim info As XmlNode = XmlStoreDoc.DocumentElement

info.SelectSingleNode("/fluidtools2/section/user-data/attribute[@name=""Benennung""]").Attributes.ItemOf(1).Value = "neue Benennung"
info.SelectSingleNode("/fluidtools2/section/user-data/attribute[@name=""Teilenummer""]").Attributes.ItemOf(1).Value = "neue Teilenummer"

XmlStoreDoc.Save(XmlStorageFile)
Catch ex As Exception
' Abfangen bei Nichtvorhandensein
End Try
End Sub


------------------
Grüße aus Sachsen
pw

Karl Marx ist tot, Einstein ist tot, und mir ist auch schon ganz schlecht!

[Diese Nachricht wurde von Patrick Weber am 18. Jan. 2012 editiert.]

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

Comos User
Mitglied



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

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 18. Jan. 2012 09:04    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 noctis79 10 Unities + Antwort hilfreich

Hallo,

mann sieht es immer wieder, da wird versucht XML als Text zu behandeln. Das ist nicht der Sinn, es kommt ja auch niemand auf die Idee z.B. ein EXCEL File als Text zu behandeln.

Es gibt genug kostenlose Bibliotheken und Frameworks für DOM die sich in jede Programmierumgebung einbinden lassen.

Nur noch ein Zusatz zu Patricks Lösung:

Code:
info.SelectSingleNode("/fluidtools2/section/user-data/attribute[@name=""Benennung""]").Attributes.ItemOf("value").Value = "neue Benennung"

Dies ist auf jeden Fall robuster. Auch wenn es immer so zu seien scheint, kein Validator prüft ob das 'value' Attribut auf Position 1 steht. Die Reihenfolge der Attribute ist in XML grundsätzlich nicht relevant (deshalb haben sie ja einen Namen). Der gezielte Zugriff sollte also immer über den Namen erfolgen.


Gruß Peter

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

noctis79
Mitglied
Konstrukteur/ CAD-Administrator


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

Beiträge: 164
Registriert: 07.10.2009

Inventor Simulation 2011 - 64-Bit-Edition
Productstream Professional Pro 2011

erstellt am: 18. Jan. 2012 09:18    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

Danke an Patrick und Peter!

Ist mir schon klar, dass man eine xml- Datei nicht als txt- Datei behandeln sollte.
Diesen Umweg habe ich nur gewählt um auf die Schnelle zu testen ob und wie FluidDraw auf eine geänderte Quelldatei reagiert.
Der Aufruf der Datei im txt- Format über den FileReader ist auch nicht der sicherste da alle Vorkommen getauscht werden...
Deswegen meine Anfrage nach einer eleganteren Lösung...

Danke für Eure Hilfe!

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



Technischer Redakteur (m/w/d)
TROX ist auf dem Weltmarkt führend in der Entwicklung, der Herstellung und dem Vertrieb von Komponenten, Geräten und Systemen zur Belüftung und Klimatisierung von Räumen. Mit 34 Tochtergesellschaften in 27 Ländern auf fünf Kontinenten, 20 Produktionsstätten und weiteren Importeuren und Vertretungen ist das Unternehmen in über 70 Ländern vor Ort. Aktuell erwirtschaftet die TROX GROUP weltweit mit rund 4....
Anzeige ansehenTechnische Dokumentation
Patrick Weber
Mitglied
Konstruktionstechniker, Admin


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

Beiträge: 657
Registriert: 20.11.2006

erstellt am: 18. Jan. 2012 10:47    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 noctis79 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Comos User:
Code:
info.SelectSingleNode("/fluidtools2/section/user-data/attribute[@name=""Benennung""]").Attributes.ItemOf("value").Value = "neue Benennung"

Ich hatte das gestern eigentlich auch probiert, bin aber in eine Exception gerannt. Vielleicht hatte ich auch nur einen Typo im Code... war ja schon spät. 

------------------
Grüße aus Sachsen
pw

Karl Marx ist tot, Einstein ist tot, und mir ist auch schon ganz schlecht!

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