la creazione di attributi xml da VBA di Excel

I’ cercando di scrivere un file xml da VBA di Excel utilizzando Microsoft XML 6.0.
Finora funziona bene, tranne che per alcuni attributi.
Questo è un estratto dal mio codice:

Dim block,knoten,subknoten, subknoten2 As MSXML2.IXMLDOMNode
Dim attribut, attribut2 As MSXML2.IXMLDOMAttribute

'...'
Set knoten = block.appendChild(.createNode(NODE_ELEMENT, "name", ""))
Set attribut = .createAttribute("id")
attribut.nodeValue = "Knotentext"
knoten.setAttributeNode attribut ' works fine so far '

Set subknoten = knoten.appendChild(.createNode(NODE_ELEMENT, "unterknoten", ""))
Set subknoten2 = subknoten.appendChild(.createNode(NODE_ELEMENT, "unterknoten2", ""))
subknoten2.nodeTypedValue = "Knotentext"
Set attribut = .createAttribute("id")
attribut.Value ="Attributstext"
subknoten2.setAttributeNode attribut  ' this line creates an error, rest is ok
'...'

L’ultima linea di porta per il Compilatore messaggio “Metodo o di un oggetto non trovato”
Questo si adatta con il fatto che “setAttributeNode” non è nell’elenco di selezione quando si entra in subknoten2.
Ma che differenza c’è a nodi? Essi hanno sia stato definito e creato allo stesso modo.
Nella finestra di monitoraggio (Überwachungsfenster) vedo i seguenti tipi:
nodi: Variante/Oggetto/IXMLDOMElement
subknoten2: IXMLDOMNODE/IXMLDOMElement

Qualcuno ha un’idea di cosa sta succedendo e come posso allegare un attributo di subknoten2?
Grazie per il tuo tempo…

InformationsquelleAutor Adrian | 2011-03-10

 

2 Replies
  1. 1

    il problema potrebbe essere il DIM dichiarazioni:

    quando si dim senza un come clausola la variabile è dichiarata come una variante

    Dim block,knoten,subknoten, subknoten2 As MSXML2.IXMLDOMNode
    Dim attribut, attribut2 As MSXML2.IXMLDOMAttribute

    block,knoten,subknoten,attribut sono tutte le varianti

    Questo spiega la differenza si vede nella finestra del monitor, ma non risolverà il problema di fondo.

    La ragione si ottiene un errore che setAttributeNode è un metodo di IXMLDOMElement, non IXMLDOMNode

    Difficile essere sicuri modulo il codice postato, ma potrebbe essere necessario utilizzare .createElement piuttosto che .createNode

    • Ciao Chris,grazie mille! Non ero a conoscenza che la presente dichiarazione è solo per l’ultima variabile. Ora ho definito blocco, nodi, subknoten e subknoten2 come IXMLDOMElement e questo funziona perfettamente.
  2. 1

    È possibile aggiungere attributi di un nodo esistente utilizzando il seguente codice

    Dim pairList As IXMLDOMNodeList
    Dim pairNode As IXMLDOMNode
    Dim objAttr As IXMLDOMAttribute
    
    Set pairList = objDom.selectNodes("/PairList/*")
    
    
    
    For Each pairNode In pairList
               '--------------------------------------------------
               ' Setting Target Positions
               '-------------------------------------------------
                Set objAttr = objDom.createAttribute("TX")
                pairNode.Attributes.setNamedItem(objAttr).Text = tPoint.X
               Set objAttr = objDom.createAttribute("TY")
                pairNode.Attributes.setNamedItem(objAttr).Text = tPoint.Y
               Set objAttr = objDom.createAttribute("TZ")
                pairNode.Attributes.setNamedItem(objAttr).Text = tPoint.Z
    
    
    Next pairNode

Lascia un commento