Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBScript xmlDoc.save-isn';行不通_Xml_File Io_Vbscript_Asp Classic - Fatal编程技术网

VBScript xmlDoc.save-isn';行不通

VBScript xmlDoc.save-isn';行不通,xml,file-io,vbscript,asp-classic,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

我正在使用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
子写入错误(错误)
text=“”
text=text&vbCrLf&¤tUser&&
text=text&vbCrLf&&Now&&
text=text&vbCrLf&&error&&
text=text&vbCrLf&“
设置xmlDoc=Server.CreateObject(“Microsoft.XMLDOM”)
xmlDoc.async=false
loadXML(文本)
Save((Server.MapPath(“xml/Error.xml”))
端接头

这将获取用户名、当前时间和错误消息,并将其写入文件。我以前使用过几乎完全相同的函数,它工作得很好,所以我不确定这里发生了什么。有什么想法吗?

这可能是您的结束xml标记

您还可以使用FSO以文本文件的形式编写,而不是使用XML activeX

像这样的

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

它可能是您的结束xml标记

您还可以使用FSO以文本文件的形式编写,而不是使用XML activeX

像这样的

outFile="xml/Error.xml"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.WriteLine "<xml>"
...
objFile.Close
outFile=“xml/Error.xml”
设置objFile=objFSO.CreateTextFile(outFile,True)
objFile.WriteLine“”
...
objFile.Close
正如您已经怀疑的那样,您正在获得该错误,因为您在字符串的末尾放置了另一个开头的
标记:

<xml>
<username>jbrown</username>
<date>01/13/2014 15:42:23</date>
<error>Your error message.</error>
<xml>
这会给你以下信息:

以下标记未关闭:xml,xml

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

Set rootNode=xmlDoc.CreateElement(“xml”)
设置userNode=xmlDoc.CreateElement(“用户名”)
userNode.text=currentUser
rootNode.AppendChild用户节点
Set dateNode=xmlDoc.CreateElement(“日期”)
dateNode.text=Now
rootNode.AppendChild日期节点
设置errorNode=xmlDoc.CreateElement(“错误”)
errorNode.text=错误
rootNode.AppendChild errorNode
xmlDoc.Save Server.MapPath(“xml/Error.xml”)
通过在函数中包装子节点创建,可以稍微简化这一点:

函数NewNode(名称、值)
Set node=xmlDoc.CreateElement(名称)
node.text=值
设置NewNode=node
端函数
Set rootNode=xmlDoc.CreateElement(“xml”)
rootNode.AppendChild NewNode(“用户”,currentUser)
rootNode.AppendChild NewNode(“日期”,现在)
rootNode.AppendChild NewNode(“错误”,error)
xmlDoc.Save Server.MapPath(“xml/Error.xml”)

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

  • Microsoft.XMLDOM
    已过时。改用
    Msxml2.DOMDocument.6.0
  • 删除多余的括号。与其他脚本语言不同,VBScript并不总是要求参数列表放在括号中。了解VBScript中括号的许多不同含义(以及可以创建的有趣情况)
  • 正如已经怀疑的那样,由于您在字符串的末尾放置了另一个开头的
    标记,您将获得该错误:

    <xml>
    <username>jbrown</username>
    <date>01/13/2014 15:42:23</date>
    <error>Your error message.</error>
    <xml>
    这会给你以下信息:

    以下标记未关闭:xml,xml

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

    Set rootNode=xmlDoc.CreateElement(“xml”)
    设置userNode=xmlDoc.CreateElement(“用户名”)
    userNode.text=currentUser
    rootNode.AppendChild用户节点
    Set dateNode=xmlDoc.CreateElement(“日期”)
    dateNode.text=Now
    rootNode.AppendChild日期节点
    设置errorNode=xmlDoc.CreateElement(“错误”)
    errorNode.text=错误
    rootNode.AppendChild errorNode
    xmlDoc.Save Server.MapPath(“xml/Error.xml”)
    
    通过在函数中包装子节点创建,可以稍微简化这一点:

    函数NewNode(名称、值)
    Set node=xmlDoc.CreateElement(名称)
    node.text=值
    设置NewNode=node
    端函数
    Set rootNode=xmlDoc.CreateElement(“xml”)
    rootNode.AppendChild NewNode(“用户”,currentUser)
    rootNode.AppendChild NewNode(“日期”,现在)
    rootNode.AppendChild NewNode(“错误”,error)
    xmlDoc.Save Server.MapPath(“xml/Error.xml”)
    

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

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

  • +1用于指出错误。但是,我不建议将手工编制的XML字符串写入文本文件。这只会延迟像OP那样的错误检测。谢谢你的评论!我试过了,但似乎还是不起作用。我只是让它简单地写,看看文件是否会写,什么都没发生我相信它挂在Set objFile行上。我放了一个响应。在它之后直接写,什么都没有发生。+1用于指出错误。但是,我不建议将手工编制的XML字符串写入文本文件。这只会延迟像OP那样的错误检测。谢谢你的评论!我试过了,但似乎还是不起作用。我只是让它简单地写,看看文件是否会写,什么都没发生我相信它挂在Set objFile行上。我写了一个回复。直接写在后面,什么都没有发生。谢谢你的建议。但奇怪的是,这仍然没有写入文件