Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

XML per VBA

XML per VBA
02.12.2020 18:27:25
Werner
Hallo,
benötige nochmals eine kleine Hilfestellung bzgl. XML.
Mein Code sieht so aus:
'neues XML - Objekt erzeugen
Set xml = New MSXML2.DOMDocument60
' Die oberste Hierarchiestufe erstellen
xml.LoadXML ""
xml.appendChild xml.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859-1""")
Set xmlORDER_LIST = xml.createElement("ORDER_LIST")
xml.appendChild xmlORDER_LIST
' Die ORDER unter ORDER_LIST erstellen
Set xmlORDER = xmlORDER_LIST.appendChild(xml.createElement("ORDER"))
xmlORDER_LIST.appendChild xmlORDER
' Creates Attribute für ORDER Element
Set xmlORDERATTR = xml.createAttribute("xmlns")
xmlORDERATTR.NodeValue = "http://www.opentrans.org/XMLSchema/1.0"
xmlORDER.setAttributeNode xmlORDERATTR
Set xmlORDER_HEADER = xmlORDER.appendChild(xml.createElement("ORDER_HEADER"))
xmlORDER.appendChild xmlORDER_HEADER
und die XML Datei so:
?xml version="1.0" encoding="ISO-8859-1"?
ORDER_LIST
ORDER xmlns="http://www.opentrans.org/XMLSchema/1.0"
ORDER_HEADER xmlns=""
CONTROL_INFO
GENERATOR_INFO Shopware5 GENERATOR_DATE 02.12.2020 CONTROL_INFO
ORDER_INFO
Das Problem ist im Element "ORDER_HEADER" dort steht nun auch xmlns="" und das sollte nicht sein. Kann man das Attribut auch wieder ausstellen.
Vielen Dank im Voraus
Werner

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XML per VBA
02.12.2020 19:20:33
Tino
Hallo,
reicht es nicht die Zeilen wegzulassen?
Set xmlORDER_HEADER = xmlORDER.appendChild(xml.createElement("ORDER_HEADER"))
xmlORDER.appendChild xmlORDER_HEADER
Gruß Tino
AW: XML per VBA
02.12.2020 19:38:22
Werner
Hallo Tino,
die XML Struktur muss einem bestimmten Schema folgen, insofern kann ich die Zeilen nicht weglassen.
Nach xmlORDER_HEADER kommen weitere Node.
Beste Grüße
Werner
AW: XML per VBA
02.12.2020 20:13:48
Tino
Hallo,
dann zeige den kompletten Code zum erstellen der XML.
Gruß Tino
AW: XML per VBA
02.12.2020 20:49:46
Werner
Hallo,
nachstehend der Code, ist aber noch nicht vollständig.
Wie gesagt das Problem liegt bei ORDER_HEADER xmlns="".
Das Attribut xmlns="" wird aus dem Knoten "ORDER" übernommen und das darf nicht sein.
Für Lösungsansätze wäre ich dankbar.
Sub Bestellungen_XML()
Dim xml                 As Object
Dim xmlORDER_LIST       As MSXML2.IXMLDOMElement
Dim xmlORDER            As MSXML2.IXMLDOMElement
Dim xmlORDER_HEADER     As MSXML2.IXMLDOMElement
Dim xmlCONTROL_INFO     As MSXML2.IXMLDOMElement
Dim xmlGENERATOR_INFO   As MSXML2.IXMLDOMElement
Dim xmlORDER_INFO       As MSXML2.IXMLDOMElement
Dim xmlORDER_PARTIES    As MSXML2.IXMLDOMElement
Dim xmlBUYER_PARTY      As MSXML2.IXMLDOMElement
Dim xmlORDERATTR        As IXMLDOMAttribute
Dim lngCounter          As Long
Dim lngZeile            As Long
lngZeile = Range("A" & Rows.Count).End(xlUp).Row
'Dateispeicherort
Const Pfad As String = "H:\XML\"
Const Dateiname As String = "Test.xml"
'neues XML - Objekt erzeugen
Set xml = CreateObject("MSXML2.DOMDocument")
xml.appendChild xml.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859- _
1""")
' Creates root element
Set xmlORDER_LIST = xml.createElement("ORDER_LIST")
xml.appendChild xmlORDER_LIST
' Creates element ORDER under xmlORDER_LIST
Set xmlORDER = xml.createElement("ORDER")
xmlORDER_LIST.appendChild xmlORDER
' Creates Attribute to the ORDER Element
Set xmlORDERATTR = xml.createAttribute("xmlns")
xmlORDERATTR.NodeValue = "http://www.opentrans.org/XMLSchema/1.0"
xmlORDER.setAttributeNode xmlORDERATTR
' Create element ORDER_HEADER under ORDER
Set xmlORDER_HEADER = xml.createElement("ORDER_HEADER")
xmlORDER.appendChild xmlORDER_HEADER
' Create element xmlCONTROL_INFO under ORDER_HEADER
Set xmlCONTROL_INFO = xml.createElement("CONTROL_INFO")
xmlORDER_HEADER.appendChild xmlCONTROL_INFO
' Create element GENERATOR_INFO under ORDER_HEADER
Set xmlGENERATOR_INFO = xml.createElement("GENERATOR_INFO")
xmlCONTROL_INFO.appendChild xmlGENERATOR_INFO
xmlGENERATOR_INFO.Text = "Test"
' Create element ORDER_INFO under ORDER
Set xmlORDER_INFO = xml.createElement("ORDER_INFO")
xmlORDER_HEADER.appendChild xmlORDER_INFO
' Create element ORDER_PARTIES under ORDER_INFO
Set xmlORDER_PARTIES = xml.createElement("ORDER_PARTIES")
xmlORDER_INFO.appendChild xmlORDER_PARTIES
'Create element BUYER_PARTY under ORDER_PARTIES
Set xmlBUYER_PARTY = xml.createElement("BUYER_PARTY")
xmlORDER_PARTIES.appendChild xmlBUYER_PARTY
'usw
xml.Save Pfad + Dateiname
End Sub
Beste Grüße
Werner
Anzeige
AW: XML per VBA
02.12.2020 22:21:12
Tino
Hallo,
versuche es mal so.
Nicht getestet weil ich mich am Rechner bin.
Kann erst morgen besser danach schauen.
Sub Bestellungen_XML()
Dim xml                 As Object
Dim xmlORDER_LIST       As MSXML2.IXMLDOMElement
Dim xmlORDER            As MSXML2.IXMLDOMElement
Dim xmlORDER_HEADER     As MSXML2.IXMLDOMElement
Dim xmlCONTROL_INFO     As MSXML2.IXMLDOMElement
Dim xmlGENERATOR_INFO   As MSXML2.IXMLDOMElement
Dim xmlORDER_INFO       As MSXML2.IXMLDOMElement
Dim xmlORDER_PARTIES    As MSXML2.IXMLDOMElement
Dim xmlBUYER_PARTY      As MSXML2.IXMLDOMElement
Dim xmlORDERATTR        As IXMLDOMAttribute
Dim lngCounter          As Long
Dim lngZeile            As Long
lngZeile = Range("A" & Rows.Count).End(xlUp).Row
'Dateispeicherort
Const Pfad As String = "H:\XML\"
Const Dateiname As String = "Test.xml"
'neues XML - Objekt erzeugen
Set xml = CreateObject("MSXML2.DOMDocument")
xml.appendChild xml.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859- _
_
1""")
' Creates root element
Set xmlORDER_LIST = xml.createElement("ORDER_LIST")
xml.appendChild xmlORDER_LIST
' Creates element ORDER under xmlORDER_LIST
Set xmlORDER = xml.createElement("ORDER")
xmlORDER_LIST.appendChild xmlORDER
' Creates Attribute to the ORDER Element
Set xmlORDERATTR = xml.createAttribute("xmlns")
xmlORDERATTR.NodeValue = "http://www.opentrans.org/XMLSchema/1.0"
xmlORDER.setAttributeNode xmlORDERATTR
' Create element xmlCONTROL_INFO under ORDER_HEADER
Set xmlCONTROL_INFO = xml.createElement("CONTROL_INFO")
xmlORDER.appendChild xmlCONTROL_INFO
' Create element GENERATOR_INFO under ORDER_HEADER
Set xmlGENERATOR_INFO = xml.createElement("GENERATOR_INFO")
xmlCONTROL_INFO.appendChild xmlGENERATOR_INFO
xmlGENERATOR_INFO.Text = "Test"
' Create element ORDER_INFO under ORDER
Set xmlORDER_INFO = xml.createElement("ORDER_INFO")
xmlORDER.appendChild xmlORDER_INFO
' Create element ORDER_PARTIES under ORDER_INFO
Set xmlORDER_PARTIES = xml.createElement("ORDER_PARTIES")
xmlORDER_INFO.appendChild xmlORDER_PARTIES
'Create element BUYER_PARTY under ORDER_PARTIES
Set xmlBUYER_PARTY = xml.createElement("BUYER_PARTY")
xmlORDER_PARTIES.appendChild xmlBUYER_PARTY
'usw
xml.Save Pfad + Dateiname
End Sub

Anzeige
AW: XML per VBA
03.12.2020 09:05:03
Werner
Guten Morgen,
vielleicht bin ich noch nicht so wach, aber ich sehe kein Unterschied in den Codes.
Gruß
Werner
bis du jetzt wach?
03.12.2020 11:57:00
Tino
Hallo,
ORDER_HEADER wird nicht mehr in die XML geschrieben!
Gruß Tino
AW: bis du jetzt wach?
03.12.2020 12:15:11
Werner
Hallo,
jetzt gesehen.
ORDER_HEADER muss aber sein und ausserdem wird xmlns="" dann in den nächsten Node CONTROL_INFO geschrieben.
Hilft also nicht.
Gruß
Werner
AW: bis du jetzt wach?
03.12.2020 12:15:24
Werner
Hallo,
jetzt gesehen.
ORDER_HEADER muss aber sein und ausserdem wird xmlns="" dann in den nächsten Node CONTROL_INFO geschrieben.
Hilft also nicht.
Gruß
Werner
AW: bis du jetzt wach?
03.12.2020 12:32:53
Tino
Hallo,
jetzt denke ich habe ich dich erst richtig verstanden!
Sub Bestellungen_XML()
Dim xml                 As Object
Dim xmlORDER_LIST       As MSXML2.IXMLDOMElement
Dim xmlORDER            As MSXML2.IXMLDOMElement
Dim xmlORDER_HEADER     As MSXML2.IXMLDOMElement
Dim xmlCONTROL_INFO     As MSXML2.IXMLDOMElement
Dim xmlGENERATOR_INFO   As MSXML2.IXMLDOMElement
Dim xmlORDER_INFO       As MSXML2.IXMLDOMElement
Dim xmlORDER_PARTIES    As MSXML2.IXMLDOMElement
Dim xmlBUYER_PARTY      As MSXML2.IXMLDOMElement
Dim lngCounter          As Long
Dim lngZeile            As Long
lngZeile = Range("A" & Rows.Count).End(xlUp).Row
'Dateispeicherort
Const Pfad As String = "H:\XML\"
Const Dateiname As String = "Test.xml"
'neues XML - Objekt erzeugen
Set xml = CreateObject("MSXML2.DOMDocument")
xml.appendChild xml.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859- _
1""")
' Creates root element
Set xmlORDER_LIST = xml.createElement("ORDER_LIST")
xml.appendChild xmlORDER_LIST
' Creates element ORDER under xmlORDER_LIST
Set xmlORDER = xml.createElement("ORDER")
xmlORDER_LIST.appendChild xmlORDER
xmlORDER.setAttribute "xmlns", "http://www.opentrans.org/XMLSchema/1.0"
' Create element ORDER_HEADER under ORDER
Set xmlORDER_HEADER = xml.createElement("ORDER_HEADER")
xmlORDER.appendChild xmlORDER_HEADER
' Create element xmlCONTROL_INFO under ORDER_HEADER
Set xmlCONTROL_INFO = xml.createElement("CONTROL_INFO")
xmlORDER_HEADER.appendChild xmlCONTROL_INFO
' Create element GENERATOR_INFO under ORDER_HEADER
Set xmlGENERATOR_INFO = xml.createElement("GENERATOR_INFO")
xmlCONTROL_INFO.appendChild xmlGENERATOR_INFO
xmlGENERATOR_INFO.Text = "Test"
' Create element ORDER_INFO under ORDER
Set xmlORDER_INFO = xml.createElement("ORDER_INFO")
xmlORDER_HEADER.appendChild xmlORDER_INFO
' Create element ORDER_PARTIES under ORDER_INFO
Set xmlORDER_PARTIES = xml.createElement("ORDER_PARTIES")
xmlORDER_INFO.appendChild xmlORDER_PARTIES
'Create element BUYER_PARTY under ORDER_PARTIES
Set xmlBUYER_PARTY = xml.createElement("BUYER_PARTY")
xmlORDER_PARTIES.appendChild xmlBUYER_PARTY
'usw
xml.Save Pfad + Dateiname
End Sub
Gruß Tino
Anzeige
AW: bis du jetzt wach?
03.12.2020 13:44:00
Werner
Hallo Tino,
das war die Lösung.
Danke
Gruß
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge