[XML/VB] Attribute toevoegen.

Pagina: 1
Acties:

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Ik wil in een XML file bij een Node een Attribute toevoegen...

Ik begin met
Set objXMLNode = AddAttribute(objXMLOrderLine, "type=", "NATIONAL")
Set objXMLNode = Nothing

Werkt niet....

Set objXMLNode = AddElement(objXMLOrderLine, "prod_code")
objXMLNode.Text = strArtZindex(lngNumber)
objXMLNode.Attributes
Set objXMLNode = Nothing

Ook hiermee kom ik niet ver...

Het XMLetje moet er zo: <prod_code type=NATIONAL>AA020C</prod_code>
uitzien.

Weet iemand hoe??????

Sign of my Time


Verwijderd

Op maandag 11 maart 2002 12:12 schreef Wilfred het volgende:
Ik wil in een XML file bij een Node een Attribute toevoegen...
[...]
Set objXMLNode = AddElement(objXMLOrderLine, "prod_code")
objXMLNode.Text = strArtZindex(lngNumber)
objXMLNode.Attributes
Set objXMLNode = Nothing
Het XMLetje moet er zo: <prod_code type=NATIONAL>AA020C</prod_code>
uitzien.
code:
1
2
3
4
5
6
7
set objXMLNode = xdDOM.createElement("prod_code")
objXMLNode.setAttribute "type","NATIONAL"
set objXMLNodeValue = xdDOM.createNode(NODE_TEXT,"","")
objXMLNodeValue.nodeValue="AA020C"
objXMLNode.appendChild objXMLNodeValue
' add to rootnode in tree
objRootNode.appendChild objXMLNode

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Wat is het Xdom voor type?

Sign of my Time


  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Zo werkt het niet. Welke versie van XML gebruik je? Bij mij kan VB de DATAMEMBER niet vinden.... Helaas.

Sign of my Time


Verwijderd

Huh? Dit is met MSXML 3.0 gemaakt (herschreven stukje code wat ik zelf gebruik voor het opbouwen van een XML boom aan de hand van een recordset) xdDom is de XMLDOMDocument waar al je nodes in zitten. Lijkt me een vrij essentieel onderdeel.

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Deze functie heb ik....

Hoe kan ik nu voor de Product code Type = NATIONAL krijgen?

Function createXML() As String


Dim objXMLNode As MSXML2.IXMLDOMNode
Dim objXMLOrderLine As MSXML2.IXMLDOMNode

Dim strResult As String
Dim lngNumber As Long
Dim strfilename1 As String
Dim lngNum As Long
Dim lngfilenumber1 As Long



Set lobjXMLDoc = New MSXML2.DOMDocument
Set lobjXMLRoot = lobjXMLDoc.createElement("create_order")
Set lobjXMLDoc.documentElement = lobjXMLRoot
lngNum = 0

'-- <user_id>USER1</user_id>
Set objXMLNode = AddElement(lobjXMLRoot, "user_id")
objXMLNode.Text = GetSetting("EAN To XML", "Startup", "UsernameBaxter")
Set objXMLNode = Nothing

Set objXMLNode = AddElement(lobjXMLRoot, "password")
objXMLNode.Text = GetSetting("EAN To XML", "Startup", "PassWordBaxter")
Set objXMLNode = Nothing


'-- <bill_to>BAX999999999</bill_to>
Set objXMLNode = AddElement(lobjXMLRoot, "bill_to")
objXMLNode.Text = ExtractArgument(2, strUserDetails, "|")
Set objXMLNode = Nothing

'-- <ship_to>BAX999999999001</ship_to>
Set objXMLNode = AddElement(lobjXMLRoot, "ship_to")
objXMLNode.Text = ExtractArgument(3, strUserDetails, "|")
Set objXMLNode = Nothing

'-- <customer_ref>JB</customer_ref>
Set objXMLNode = AddElement(lobjXMLRoot, "customer_ref")
objXMLNode.Text = ExtractArgument(7, strUserDetails, "|")
Set objXMLNode = Nothing

'-- <req_ship_date>2000-11-30</req_ship_date>
Set objXMLNode = AddElement(lobjXMLRoot, "req_ship_date")
objXMLNode.Text = Format$(ExtractArgument(5, strUserDetails, "|"), "YYYY-MM-DD")
Set objXMLNode = Nothing





'-- <comment1>Comment line 1</comment1>
Set objXMLNode = AddElement(lobjXMLRoot, "comment1")
objXMLNode.Text = ""
Set objXMLNode = Nothing

'-- <comment2>Comment line 2</comment2>
Set objXMLNode = AddElement(lobjXMLRoot, "comment2")
objXMLNode.Text = ""
Set objXMLNode = Nothing

'-- <emergency_delivery>NO</emergency_delivery>
'ToDo: Bepalen spoed of niet (kijken in de BGM 224)
Set objXMLNode = AddElement(lobjXMLRoot, "emergency_delivery")

Select Case ExtractArgument(6, strUserDetails, "|")
Case "j"
objXMLNode.Text = "Yes"
Case "J"
objXMLNode.Text = "Yes"
Case "y"
objXMLNode.Text = "Yes"
Case "Y"
objXMLNode.Text = "Yes"
Case Else
objXMLNode.Text = "No"
End Select
Set objXMLNode = Nothing

lngNumber = 0
For lngNumber = 0 To lngNumberOfOrderlines
'-- <order_line>
Set objXMLOrderLine = AddElement(lobjXMLRoot, "order_line")


'-- <prod_code>AA020C</prod_code>
Set objXMLNode = AddElement(objXMLOrderLine, "prod_code")
objXMLNode.Text = strArtZindex(lngNumber)

Set objXMLNode = Nothing


'-- <order_qty>1</order_qty>
Set objXMLNode = AddElement(objXMLOrderLine, "order_qty")
objXMLNode.Text = strBestAantal(lngNumber)
Set objXMLNode = Nothing

If strOpmerkingen(lngNumber) <> "" Then
Set objXMLNode = AddElement(objXMLOrderLine, "line_comment")
objXMLNode.Text = strOpmerkingen(lngNumber)
Set objXMLNode = Nothing
End If
Next lngNumber




strResult = "<?xml version=""1.0"" standalone=""no""?>" & vbNewLine & _
"<!DOCTYPE create_order SYSTEM ""http://www.baxter-eclipse.com/eclipse/dtd/create_order.dtd"">" & vbNewLine & _
lobjXMLDoc.xml

Set lobjXMLRoot = Nothing
Set lobjXMLDoc = Nothing

createXML = strResult
strfilename1 = (GetSetting("EAN To XML", "Startup", "Outputdir") & "\" & "order0.xml")

Do Until FileExists(strfilename1) = False
lngNum = lngNum + 1
strfilename1 = (GetSetting("EAN To XML", "Startup", "Outputdir") & "\" & "create_order" & lngNum & ".xml")

Loop
lngfilenumber1 = FreeFile
Open strfilename1 For Append As #FreeFile
Print #lngfilenumber1, strResult
Close #lngfilenumber1
DoEvents
'Debug.Print strResult


End Function

Sign of my Time


Verwijderd

En wat snap je nou niet? Dat stukje wat ik gaf kun je toch zo inpassen in je code? (Wat doet 'AddElement()' trouwens?)

Kijk anders eens bij de methods van de domdocument objects. createElement etc.

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Dit zijn de twee functies die in mijn code staan voor element en attribute...

Als ik jou code inpas lukt het niet omdat ik niet weet als wat de variablen zijn gedefinieerd... Ik zit nu vast op de NOdeValue

Private Function AddElement(objParentNode As MSXML2.IXMLDOMNode, strName As String) As MSXML2.IXMLDOMNode

Dim objNewNode As MSXML2.IXMLDOMNode


Set objNewNode = lobjXMLDoc.createElement(strName)
Set AddElement = objParentNode.appendChild(objNewNode)
Set objNewNode = Nothing
End Function

Private Sub AddAttribute(objParentNode As MSXML2.IXMLDOMNode, strName As String, strValue As String)

Dim objNewNode As MSXML2.IXMLDOMNode


If (Len(strValue) <> 0) Then
Set objNewNode = lobjXMLDoc.createAttribute(strName)
objNewNode.Text = strValue
Set objNewNode = objParentNode.Attributes.setNamedItem(objNewNode)
End If
End Sub

Sign of my Time


  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Ik kom er niet uit..

Hij geeft de vreemdste meldingen... Argument Not optional... Expected = etc. etc.

Sign of my Time

Pagina: 1