P: Excel 2003 VBA MSXML 50 DOM - xmlns Attribut ohne das ich es will

31/01/2008 - 17:20 von Martin Jaeger | Report spam
Hallo,

Ich habe eine Struktur via DOM-Elemente und Fragmente zusammengestellt.
In dem ersten Element / Knoten gebe ich eine Reihe von Attributen an,
<LIEFERUNG-GROMIO xmlns="http://www.bundesbank.de/xmw/2003-01-01"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bundesbank.de/xmw/2003-01-01
BbkXmwGroMio.xsd" version="1.0" erstellzeit="31.01.2008 14:01:44"
stufe="Test">

In einem nàchsten Unterelement <ABSENDER xmlns=""> fügt er mir automatisch
den Attributeintrag xmlns="" hinzu, ohne das ich da jemals ein Attribut
definiert habe. Woran kann das liegen?
Das ganze macht er auch bei einem spàter folgenden Element auf der
gleichen Ebene. Ich verstehe das nicht. Was mache ich falsch?

Benutzter VBA Code (Ausschnitt):

Dim domMeldung As DOMDocument50
Dim nodeLiefGroMio As IXMLDOMElement
Dim nodeAbsender As IXMLDOMElement

Dim nodeTemp As IXMLDOMNode
Dim attrTemp As IXMLDOMAttribute

Set domMeldung = New DOMDocument50
domMeldung.async = False
domMeldung.validateOnParse = False
domMeldung.resolveExternals = False
domMeldung.preserveWhiteSpace = True



' Eine "processing instruction" für xml hinzufügen
Set nodeTemp = domMeldung.createProcessingInstruction("xml",
"version='1.0' encoding='UTF-8'")
domMeldung.appendChild nodeTemp
'domMeldung.appendChild domMeldung.createTextNode(vbNewLine)
Set nodeTemp = Nothing

'fügt einen Kommentar hinzu
Set nodeTemp = domMeldung.createComment("xml file created using MSXML
5.0")
domMeldung.appendChild nodeTemp
'domMeldung.appendChild domMeldung.createTextNode(vbNewLine)
Set nodeTemp = Nothing

'Anlegen des Root-Elements "LIEFERUNG-GROMIO"
Set nodeLiefGroMio = domMeldung.createElement("LIEFERUNG-GROMIO")
'anlegen und hizufügen der attribute zu "LIEFERUNG-GROMIO"
'xmlns
Set attrTemp = domMeldung.createAttribute("xmlns")
attrTemp.Value = "http://www.bundesbank.de/xmw/2003-01-01"
nodeLiefGroMio.setAttributeNode attrTemp
Set attrTemp = Nothing
'xmlns:xsi
Set attrTemp = domMeldung.createAttribute("xmlns:xsi")
attrTemp.Value = "http://www.w3.org/2001/XMLSchema-instance"
nodeLiefGroMio.setAttributeNode attrTemp
Set attrTemp = Nothing
'xsi:schemaLocation
Set attrTemp = domMeldung.createAttribute("xsi:schemaLocation")
attrTemp.Value = "http://www.bundesbank.de/xmw/2003-01-01
BbkXmwGroMio.xsd"
nodeLiefGroMio.setAttributeNode attrTemp
Set attrTemp = Nothing
'version
Set attrTemp = domMeldung.createAttribute("version")
attrTemp.Value = "1.0"
nodeLiefGroMio.setAttributeNode attrTemp
Set attrTemp = Nothing
'erstellzeit 2006-11-20T09:30:00-05:00
Set attrTemp = domMeldung.createAttribute("erstellzeit")
'####aktuelle zeit einfügen#####
attrTemp.Value = CStr(Now)
nodeLiefGroMio.setAttributeNode attrTemp
Set attrTemp = Nothing
'stufe
Set attrTemp = domMeldung.createAttribute("stufe")
If UFormSteuerung.CheckBoxTest.Value = True Then
attrTemp.Value = "Test"
Else
attrTemp.Value = "Produktion"
End If
nodeLiefGroMio.setAttributeNode attrTemp
Set attrTemp = Nothing
'Rootelement hinzufügen
domMeldung.appendChild nodeLiefGroMio
'neuezeile und Tab einfügen
nodeLiefGroMio.appendChild domMeldung.createTextNode(vbNewLine + vbTab)

'Unterelemente zu "LIEFERUNG-GROMIO" (nodeLiefGroMio) hinzufügen
'Element Absender
Set nodeAbsender = domMeldung.createElement("ABSENDER")
nodeLiefGroMio.appendChild nodeAbsender
'neuezeile und Tab einfügen
nodeAbsender.appendChild domMeldung.createTextNode(vbNewLine + vbTab
+ vbTab)

'Node kreditgebernummer
'##########Nummer auslesen###############
Set nodeTemp = domMeldung.createElement("KREDITGEBERNR")
nodeTemp.Text = CStr(wsMD.Range("MELDEDATEI_ABSKGN")) 'ohne PZ!!!!!
nodeAbsender.appendChild nodeTemp
Set nodeTemp = Nothing
'neuezeile und Tab einfügen
nodeAbsender.appendChild domMeldung.createTextNode(vbNewLine + vbTab
+ vbTab)

'Node Kreditgebername hinzufügen
'##########Name auslesen###########
Set nodeTemp = domMeldung.createElement("NAME")
nodeTemp.Text = CStr(wsMD.Range("MELDEDATEI_ABSKGBEZ"))
nodeAbsender.appendChild nodeTemp
Set nodeTemp = Nothing
'neuezeile und Tab einfügen
nodeAbsender.appendChild domMeldung.createTextNode(vbNewLine + vbTab)
'Absender bereinigen
Set nodeAbsender = Nothing
 

Lesen sie die antworten

#1 Martin Honnen
31/01/2008 - 19:24 | Warnen spam
Martin Jaeger wrote:

Hallo,

Ich habe eine Struktur via DOM-Elemente und Fragmente zusammengestellt.
In dem ersten Element / Knoten gebe ich eine Reihe von Attributen an,
<LIEFERUNG-GROMIO xmlns="http://www.bundesbank.de/xmw/2003-01-01"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bundesbank.de/xmw/2003-01-01
BbkXmwGroMio.xsd" version="1.0" erstellzeit="31.01.2008 14:01:44"
stufe="Test">

In einem nàchsten Unterelement <ABSENDER xmlns=""> fügt er mir
automatisch den Attributeintrag xmlns="" hinzu, ohne das ich da jemals
ein Attribut definiert habe. Woran kann das liegen?
Das ganze macht er auch bei einem spàter folgenden Element auf der
gleichen Ebene. Ich verstehe das nicht. Was mache ich falsch?



Wenn du per MSXML DOM Elemente oder Attribute in einem bestimmten
Namensraum erstellen willst, dann musst du createNode benutzen, und zwar
für jeden Knoten, der in dem Namensraum sein soll.
Wenn du also
<root xmlns="http://example.com/ns1"><...t;root>
erzeugen willst, dann per (pseudo code)

Set xmlDocument As New DOMDocument50()
ns = "http://example.com/ns1"
Set root = xmlDocument.createNode(1, "root", ns)
Set foo = xmlDocument.createNode(1, "foo", ns)
Set bar = xmlDocument.createNode(1, "bar", ns)
foo.appendChild bar
root.appendChild foo
xmlDocument.appendChild root

Die xsi:schemaLocation erzeugst du dann wie folgt:
Set attribute = xmlDocument.createNode(2, "xsi:schemaLocation",
"http://www.w3.org/2001/XMLSchema-instance")
attribute.Value = "http://www.bundesbank.de/xmw/2003-01-01
BbkXmwGroMio.xsd"
root.setAttributeNode(attribute)

Namesraum-Deklarationen wie xmlns="..." oder xmlns:xsi="" brauchst du
nicht explizit zu erzeugen, das passiert dann man beim Serialisieren
(Speichern) des DOM.



Martin Honnen MVP XML
http://JavaScript.FAQTs.com/

Ähnliche fragen