Классический ASP, обновляющий дочерние узлы в XML - PullRequest
1 голос
/ 30 октября 2009

Я пытаюсь обновить дочерний узел файла XML IE. Изменение значения.

Файл XML выглядит следующим образом:

<user>
  <firstname>Andre</firstname>
  <lastname>Bruton</lastname>
</user>

Вот мой классический код asp:

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 Reading 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

Проблема в том, что он добавляет новый раздел в файл XML вместо обновления значения имени от Андре до Тристана. XML выглядит так:

<user>
<firstname firstname="Andre6">Andre</firstname>
<lastname>Bruton</lastname>
</user>

Как должно выглядеть:

<user>
<firstname>Tristan</firstname>
<lastname>Bruton</lastname>
</user>

Есть идеи, как мне это исправить?

1 Ответ

2 голосов
/ 30 октября 2009

Вместо использования метода .setAttribute следует использовать свойство .Text.

If firstname <> users_firstname Then
    Set nodeBook = xmlObj.selectSingleNode("//firstname")
    nodeBook.Text = users_firstname
    Response.Write nodeBook.Text
    xmlObj.save(cDir & cFile)
End If
...