I am trying to update a child node of an XML file IE Changing the
value.
The XML file looks like this:
<user>
<firstname>Andre</firstname>
<lastname>Bruton</lastname>
</user>
Here is my Classic asp code:
users_firstname = "Tristan" 'New code to put in the XML file
Set xmlObj = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
xmlObj.async = False
xmlObj.setProperty "ServerHTTPRequest", True
xmlObj.Load(cURL)
If xmlObj.parseError.errorCode <> 0 Then
Response.Write "Error Reaqding File - " & xmlObj.parseError.reason
& "<p>"
End If
Set xmlList = xmlObj.getElementsByTagName("user")
For Each xmlItem In xmlList
For Each xmlItem2 In xmlItem.childNodes
a = xmlItem2.nodeName
if a = "firstname" then firstname = xmlItem2.text
if a = "lastname" then lastname = xmlItem2.text
Next
Next
If firstname <> users_firstname Then
Set nodeBook = xmlObj.selectSingleNode("//firstname")
nodeBook.setAttribute "firstname", users_firstname
Response.Write nodeBook.getAttribute("firstname")
xmlObj.save(cDir & cFile)
End If
Set xmlObj = Nothing
The problem is that it adds a new section to the XML file instead of
updating the value of firstname from Andre to Tristan. The XML looks
like this:
<user>
<firstname firstname="Andre6">Andre</firstname>
<lastname>Bruton</lastname>
</user>
What is should look like is:
<user>
<firstname>Tristan</firstname>
<lastname>Bruton</lastname>
</user>
Any idea how I can fix this?
Best regards
Andre
If you only have a single <user> element, there is no need to do a loop:
just use selectSingleNode:
set usernode = xmlObj.selectSingleNode("//user")
>
> If firstname <> users_firstname Then
> Set nodeBook = xmlObj.selectSingleNode("//firstname")
> nodeBook.setAttribute "firstname", users_firstname
> Response.Write nodeBook.getAttribute("firstname")
> xmlObj.save(cDir & cFile)
> End If
>
> Set xmlObj = Nothing
>
>
> The problem is that it adds a new section to the XML file instead of
> updating the value of firstname from Andre to Tristan. The XML looks
> like this:
>
> <user>
> <firstname firstname="Andre6">Andre</firstname>
> <lastname>Bruton</lastname>
> </user>
>
>
> What is should look like is:
>
> <user>
> <firstname>Tristan</firstname>
> <lastname>Bruton</lastname>
> </user>
>
>
> Any idea how I can fix this?
>
Don't use getAttribute or SetAttribute.
This is an attribute: firstname="Andre6"
This is an element: <firstname>Tristan</firstname>
Untested air code:
set fnamenode = xmlObj.selectSingleNode("//user/firstname")
if fnamenode.nodeValue <> users_firstname then
fnamenode.nodeValue = users_firstname
end if
Response.Write fnamenode.nodeValue
xmlObj.save cDir & cFile
--
HTH,
Bob Barrows
Thank you for the info. I managed to get it working late last night
using the following code...
If firstname <> users_firstname Then
Set objRoot = xmlObj.documentElement
Set objField = objRoot.selectSingleNode("firstname")
objField.Text = users_firstname
xmlObj.save(cDir & cFile)
End If
Best regards
Andre F Bruton