TIA XML Daten lesen

Supermario73

Level-2
Beiträge
108
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Habe hier ein funktionierendes Beispiel um eine XML Datei zu lesen:
Code:
Sub Read_XML_from_file()
Dim XMLo, XMLroot, item, tagName, tagValue

' Catch errors -- Fehler abfangen
On Error Resume Next

' Create file object -- Objekt erstellen
Set XMLo = CreateObject("MSXML.DOMDocument")

XMLo.Load("D:\test.xml")

Set XMLroot= XMLo.documentElement

For Each item In XMLroot.childNodes
 ShowSystemAlarm "Reading XML: """ & item.getAttribute("name") _
     & """= """ & item.getAttribute("value") & """"

 tagName= item.getAttribute("name")
 tagValue= item.getAttribute("value")
 SmartTags(tagName)= tagValue
Next

If Err.Number <> 0 Then
 ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
 Err.Clear
 Exit Sub
End If

' Tidy up -- Aufraeumen
ShowSystemAlarm "Readout of XML data was successful!"
End Sub

die test.xml sieht so aus:

<?xml version="1.0"?>
<root>
<property name="Material" value=""/>
<property name="Pressure" value="10"/>
<property name="Temperature" value="20"/>
</root>


Soweit so gut. Nun sieht meine XML Datei ein wenig anders aus und ich bekomme es nicht hin die Werte "Testname" und "Nachtest" in eine Variable zu schreiben.

<?xml version="1.0" encoding="utf-8"?>
<root>
<location>
<name>Testname</name>
<nachname>Nachtest</nachname>
</location>
</root>

Hat jemand eine Idee wie ich die 2 Werte auf Variablen schreiben kann??

Besten Dank für Eure Hilfe.
 
Ich würde einmal sagen, ohne die Funktion Sub Read_XML_from_File anzupassen wird das auch nicht funktionieren.

Diese wertet ja die beiden Werte
Code:
tagName= item.getAttribute("[B]name[/B]")
tagValue= item.getAttribute("[B]value[/B]")

<property [B]name[/B]="[COLOR=#0000ff]Material[/COLOR]" [B]value[/B]="[COLOR=#0000ff]10[/COLOR]"/>


Diese wertet ja die beiden Werte und nicht die von dir aufgeführte XML ...
Die hat doch einen anderen Aufbau ...

Code:
<location>
<[B]name[/B]>Testname</name>
<[B]nachname[/B]>Nachtest</nachname>
</location>
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Boxy
Ja, genau der Code soll so angepasst werden, dass das neue XML File gelesen werden kann. Aber alle Anpassungen die ich versucht habe, funktionierten nicht.

Hat jemand eine Idee, wie der Code angepasst werden soll?

Besten Dank für die Hilfe.
 
Wass für eine Ausgabe erhälst Du denn?
Kann es sein, dass Du nicht von Root sondern von Location aus die Schleife lauifen lassen musst?
 
Kann leider heute nicht mehr die Störmeldung bekannt geben. Es wird auf jeden Fall nichts auch die Variablen geschrieben.
Ja das kann sein, doch ich wüsste nicht wie ich auf location verweisen kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eins nach dem anderen, zuerst mal alle Ausgaben hier posten. Die Schleife sollte alle Elemente auf der gewählten Ebene einlesen. Diese dann auch noch ausgeben, damit wir sehen können, was eigentlich passiert. Momentan ist es eher ein stochern im Nebel.
 
Also der gemeldete Fehler auf dem HMI lautet:
Error #-2147024809 tag lookup only by Name

Ich hoffe das dies weiterhilft für ein Lösungsvorschlag.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Krumnix
Besten Dank für Deine Link. Der Code ist in PHP.

Ich suche eine Lösung mit VB (HMI).

Um auf die Variablen zuzugreifen soll es wie folgt sein: (Code ist falsch und sollte nur das Ziel aufzeigen)

Name = XMLroot.childNodes.location.Name

Wir suchen den Code um eine Variable in einer XML Datei zu lesen in VB und kommen nicht auf die richtige Lösung:

XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<location>
<name>Testname</name>
<nachname>Nachtest</nachname>
</location>
</root>

Varaiable "Name" sollte am Ende den Wert "Testname" haben.


Kennt jemand den Code in VB?
Besten Dank für Eure Hilfe
 
In Deinem Root existiert nur Location, Du greifst aber auf Name etc. zu. Dies führt zu dem Fehler. Du musst zuerst Location anwählen und kannst dann über die einzelnen Elemente iterieren.
Hast Du Dir bereits einmal die Doku zur XML-Verwendung z. B. hier angesehen?
 
Hallo Mario,

versuch es mal so:



Code:
On Error Resume Next


Dim xmlFile
Dim ChildNode


Set xmlFile = CreateObject("Microsoft.XMLDOM")

If xmlFile.Load([COLOR=#333333]test.xml[/COLOR])Then
   Set ChildNode =  xmlFile.documentElement.selectSingleNode("root/location/name")   
   SmartTags("Name") = ChildNode.text
   Set ChildNode =  xmlFile.documentElement.selectSingleNode("root/location/nachname")   
   SmartTags("Nachname") = ChildNode.text

   Set ChildNode =  xmlFile.documentElement.selectSingleNode("root/location/name")   
   SmartTags("Name") = ChildNode.text

end if


Gruß

Jens
 
Hallo Jens
Besten Dank für Deinen Input.
Bei der Zeile xmlFile.Load(test.xml) gibt es einen Fehler.
Habe diese auf xmlFile.Load("D:\testxml.xml")


Code:
On Error Resume Next


Dim xmlFile
Dim ChildNode


Set xmlFile = CreateObject("Microsoft.XMLDOM")

If xmlFile.Load("D:\[COLOR=#333333]testxml.xml[/COLOR]) Then
   Set ChildNode =  xmlFile.documentElement.selectSingleNode("root/location/name")   
   SmartTags("Name") = ChildNode.text
   Set ChildNode =  xmlFile.documentElement.selectSingleNode("root/location/nachname")   
   SmartTags("Nachname") = ChildNode.text

   Set ChildNode =  xmlFile.documentElement.selectSingleNode("root/location/name")   
   SmartTags("Name") = ChildNode.text

end if
If Err.Number <> 0 Then
 ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
 Err.Clear
 Exit Sub
End If
' Tidy up -- Aufraeumen
ShowSystemAlarm "Readout of XML data was successful!"

Habe noch den Error abgefragt
Gibt nun die Störmeldung aus: error #424 Objekt erforderlich
Hast Du vielleicht noch eine Idee?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Krumnix
Besten Dank für Deine Link. Der Code ist in PHP.

Der Code ist doch für VB...
Wie kommst du auf PHP?
Wenn du auf
PHP:
 anspielst, dass ist die Forums-Formatierung. Dies habe ich ja schon geschrieben, dass diese nicht mehr funktioniert :)
Der Code selbst ist VB und läuft auf WinCC x.x, Felxible 200x und TIA x.x
 
Im Pfadname muss das "root" gelöscht werden.
Nun funktioniert es!

Funktionierender Code:

Code:
On Error Resume Next


Dim xmlFile
Dim ChildNode


Set xmlFile = CreateObject("Microsoft.XMLDOM")

If xmlFile.Load("D:\[COLOR=#333333]testxml.xml[/COLOR]) Then
   Set ChildNode =  xmlFile.documentElement.selectSingleNode("location/name")   
   SmartTags("Name") = ChildNode.text
   Set ChildNode =  xmlFile.documentElement.selectSingleNode("location/nachname")   
   SmartTags("Nachname") = ChildNode.text
end if

If Err.Number <> 0 Then
 ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
 Err.Clear
 Exit Sub
End If

' Tidy up -- Aufraeumen
ShowSystemAlarm "Readout of XML data was successful!"

Besten Dank Euch allen für Eure Hilfe!!
 
Zurück
Oben