2014-01-16 58 views
0

我正在使用VBScript編寫一個ASP-classic頁面,每當發生寫入Oracle數據庫的錯誤時,我想寫一個xml文件並將其保存到webserver上的目錄。VBScript xmlDoc.save不工作

這是我有:

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 

這需要用戶名,當前時間和錯誤消息,並且應該將其寫入到一個文件中。我之前使用過幾乎完全相同的功能,並且它工作得很好,所以我不確定這裏發生了什麼。有任何想法嗎?

+0

我想清楚我的問題是什麼。是的,這是關閉xml標籤,也是因爲我在'error'末尾附加了'
',所以'
'扔掉了一切。謝謝您的幫助! –

回答

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中許多不同含義的括號(以及可創建的有趣情況)。
+0

感謝您的寶貴意見。奇怪的是,這仍然沒有寫入文件。我無法弄清楚爲什麼它不會寫入 –

+0

它似乎陷入Set rootNode行。我在它後面直接寫了一個response.write,沒有任何顯示。 –

+0

明白了。 'error'末尾有一個'
',它不喜歡那個。你的xmlDoc.ParseError是幫助我解決它的,所以我會給你正確的答案。另外,我喜歡你展示孩子節點的方式。 –

2

這可能是您的關閉xml標記。

您也可以使用FSO編寫爲文本文件,而不是使用XML activeX。

像這樣的事情

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

+1用於指出錯誤。但是,我會**不推薦將手工製作的XML字符串寫入文本文件。這隻會延遲檢測像OP所做的那樣的錯誤。 –

+0

感謝您的評論!我試過這個,但它似乎仍然沒有工作。我只是簡單地寫看文件是否會寫入,什麼也沒有發生 –

+0

我相信它掛在Set objFile行。我在它之後直接寫了一個response.write,並沒有發生任何事情。 –

相關問題