我正在使用VBScript编写ASP经典页面,每当发生写入Oracle数据库的错误时,我都想编写一个xml文件并将其保存到Web服务器上的目录中。
这就是我所拥有的:
Sub writeError(error)
text="<xml>"
text = text & vbCrLf &"<username>"¤tUser&"</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
这需要用户名,当前时间和错误消息,并且应该将其写入文件。我以前几乎使用过这个完全相同的功能,而且工作得很好,所以我不确定这里发生了什么。有什么想法吗?
答案 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")
另一方面,我想建议另外两个修改:
Microsoft.XMLDOM
已过时。请改用Msxml2.DOMDocument.6.0
。