VBScript xmlDoc.save无法正常工作

时间:2014-01-16 20:17:58

标签: xml file-io vbscript asp-classic

我正在使用VBScript编写ASP经典页面,每当发生写入Oracle数据库的错误时,我都想编写一个xml文件并将其保存到Web服务器上的目录中。

这就是我所拥有的:

Sub writeError(error)
    text="<xml>"
    text = text & vbCrLf &"<username>"&currentUser&"</username>"
    text=text & vbCrLf & "<date>"&Now&"</date>"
    text=text & vbCrLf & "<error>"&error&"</error>"
    text=text & vbCrLf & "<xml>"    

    set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.async=false
    xmlDoc.loadXML(text)
    xmlDoc.Save((Server.MapPath("xml/Error.xml")))
End sub

这需要用户名,当前时间和错误消息,并且应该将其写入文件。我以前几乎使用过这个完全相同的功能,而且工作得很好,所以我不确定这里发生了什么。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这可能是你的关闭xml标签。

您也可以使用FSO编写为文本文件,而不是使用XML activeX。

像这样的东西

outFile="xml/Error.xml"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.WriteLine "<xml>"
...
objFile.Close

答案 1 :(得分:1)

由于G. Stoynev已经怀疑您收到了该错误,因为您在字符串的末尾添加了另一个打开的<xml>标记:

<xml>
<username>jbrown</username>
<date>01/13/2014 15:42:23</date>
<error>Your error message.</error>
<xml>

它应该是一个结束标记(</xml>):

<xml>
<username>jbrown</username>
<date>01/13/2014 15:42:23</date>
<error>Your error message.</error>
</xml>

您可以通过检查ParseError属性

来检测此类错误
If xmlDoc.ParseError <> 0 Then
  MsgBox xmlDoc.ParseError.Reason
End If

会给你以下信息:

  

以下标记未关闭:xml,xml。

建议只是简单地将XML字符串写入文件,因为这样无效的XML将在有人尝试使用该文件之前检测不到。不要通过字符串连接来构造XML,而是使用适当的方法。

Set rootNode = xmlDoc.CreateElement("xml")

Set userNode  = xmlDoc.CreateElement("username")
userNode.text = currentUser
rootNode.AppendChild userNode

Set dateNode  = xmlDoc.CreateElement("date")
dateNode.text = Now
rootNode.AppendChild dateNode

Set errorNode  = xmlDoc.CreateElement("error")
errorNode.text = error
rootNode.AppendChild errorNode

xmlDoc.Save Server.MapPath("xml/Error.xml")

您可以通过在函数中包装子节点来简化这一点:

Function NewNode(name, value)
  Set node = xmlDoc.CreateElement(name)
  node.text = value
  Set NewNode = node
End Function

Set rootNode = xmlDoc.CreateElement("xml")

rootNode.AppendChild NewNode("user", currentUser)
rootNode.AppendChild NewNode("date", Now)
rootNode.AppendChild NewNode("error", error)

xmlDoc.Save Server.MapPath("xml/Error.xml")

另一方面,我想建议另外两个修改:

  1. Microsoft.XMLDOM已过时。请改用Msxml2.DOMDocument.6.0
  2. 删除多余的括号。与其他脚本语言不同,VBScript并不总是要求参数列表在括号中。阅读this article关于VBScript中括号的许多不同含义(以及可以创建的有趣情况)。