2017-02-23 74 views
0

問題在於,我將通過其子節點的值移除XML父節點,並且值爲ProcessDate作爲日期格式。以XML節點爲參數將條件放在特定時間範圍內

我想說明的條件是:

  • 有很多XML格式的數據,當用戶執行VBScript中,它會自動刪除該ProcessDate比一週前舊的節點。

這裏下面的代碼:

Dim strFile 
Dim strQuery 

weekdate = Day(Date < Date-7) & "/" & Month(Date) & "/" & Year(Date) 

strFile = "D:\Log.xml" 

strQuery = "/Logs/Log[ProcessDate = '" & weekdate & "']" 

Set xmlDoc = WScript.CreateObject("Microsoft.XMLDOM") 
xmlDoc.Async = "False" 
xmlDoc.Load(strFile) 

Set colNodes = xmlDoc.selectNodes(strQuery) 
For Each objNode In colNodes 
    objNode.ParentNode.removeChild(objNode) 
Next 

xmlDoc.Save strFile 

以下是圖像樣本

Sample Images

+1

[代碼或輸出爲圖像是沒有用的](http://meta.stackoverflow.com/q/303812/692942),XML輸出可以很容易地發佈爲代碼塊,而不是圖像。 – Lankymart

+1

很抱歉,感謝您的飼料 –

回答

2

表達Day(Date < Date-7)不會做你好像在想什麼。 Date < Date-7的計算結果爲布爾值False(因爲當前日期永遠不會小於7天前的日期),並且Day(False)總是返回30.此外,VBScript似乎不支持XPath 2.0函數,因此您無法轉換XML字符串值作爲通過XPath進行比較的日期。

如果日期超過7天,您需要獲取<ProcessDate>節點的值,將其轉換爲日期,並從祖父節點刪除其父節點。嘗試這樣的:

For Each n xmlDoc.SelectNodes("//ProcessDate") 
    If CDate(n.Text) < Date - 7 Then 
     n.ParentNode.ParentNode.RemoveChild(n.ParentNode) 
    End If 
Next 
+0

非常感謝。這很有幫助。該功能做正確的事情 –