2013-12-09 63 views
0

我想在我的VBScript中檢查XML節點是否已經存在。如果這種情況不應該再次添加節點,則應該更新數據。有沒有辦法解決這個問題?這裏是我的代碼:
腳本執行時,將創建一個新節點,其中包含計算機數據。 (在添加新服務器或硬盤的情況下)。唯一缺少的是當節點已經存在時,它將被更新的數據更新。檢查XML節點是否已經存在

這裏是我的代碼:

XML:

<?xml version="1.0"?> 
<SERVERSPEICHER> 
<SERVER name="LANADMIN"> 
     <FESTPLATTE id="1" disk="C:"> 
      <SPEICHER>'450,6'</SPEICHER> 
    <FREIERSPEICHER>'356,5'</FREIERSPEICHER> 
    </FESTPLATTE><FESTPLATTE id="2" disk="Q:"> 
     <SPEICHER>'13,7'</SPEICHER> 
    <FREIERSPEICHER>'3,4'</FREIERSPEICHER> 
     </FESTPLATTE> 
    </SERVER> 
</SERVERSPEICHER> 

的VBScript:

on Error Resume Next 

Function GetElementFromXmlString(xmlString) 
    Dim doc 
    set doc = CreateObject("Microsoft.XMLDOM") 
    doc.async = False 
    doc.preserveWhiteSpace= False 
    doc.loadXML(xmlString) 
    Set GetElementFromXmlString = doc.documentElement 
End Function 

Dim xmlDoc, nNode, objNodeList, plot 
dim serverNodeItem 
dim diskNodeItem 
dim diskID 

y = 1 
id = 1 

set objNetwork = CreateObject("WScript.Network") 
strComputerName = objNetwork.Computername 

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &   strComputerName) 
Set colDiskSettings = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType=3") ' Festplattendaten 

Set xmlDOc = CreateObject("Microsoft.XMLDOM") 
xmlDoc.Async = "False" 
xmlDoc.setProperty "SelectionLanguage", "XPath" 
xmlDoc.load "server.xml" 

Set objRoot = xmlDoc.documentElement 

If Err.Number = 0 Then 

Dim xmlString 
xmlString = "<SERVER name='"& strComputerName &"'>" & _ 
      "</SERVER>" 

Dim newServer 
Set newServer = GetElementFromXmlString(xmlString) 
objRoot.appendChild(newServer) 

Set objServer = xmlDoc.selectsinglenode("//SERVER") 

For Each objDisk In colDiskSettings 

    strDiskDeviceID = objDisk.DeviceID 

    strDiskSize = FormatNumber((objDisk.Size/(1024 * 1024 * 1024)),1,0,0,0) 

    strDiskFreeSpace = FormatNumber((objDisk.FreeSpace/(1024 * 1024 * 1024)),1,0,0,0) 

    Dim xmlDiskString 
    xmlDiskString = "<FESTPLATTE id='"& id &"' disk='"& strDiskDeviceID &"'>" & _ 
       "  <SPEICHER>'"& strDiskSize &"'</SPEICHER>" & _ 
       "  <FREIERSPEICHER>'"& strDiskFreeSpace &"'</FREIERSPEICHER>" & _ 
       " </FESTPLATTE>" 

    If y = id Then 

     Dim newDisk 
     Set newDisk = GetElementFromXmlString(xmlDiskString) 

     objServer.appendChild(newDisk) 

    End If 

    id = id + 1 
    y = y + 1 

Next 

Else 
    Err.clear 
End If 
strResult = xmldoc.save("server.xml") 

任何幫助將是很好!

感謝

回答

3

您可以檢查是否某個特定節點已經存在這樣的:

Set nodes = xmlDoc.SelectNodes("//SERVER[@name='" & strComputerName & "']") 
If nodes.Length = 0 Then 
    'add node 
Else 
    'update existing node 
End If 
+0

哇,成功了!非常感謝你! – user3073688

+0

@ user3073688也許您應該將其標記爲「已接受的答案」,以便具有相同問題的其他用戶也可以輕鬆找到該答案。 (並通過給予他虛擬互聯網點來向答案者表示您的讚賞!) – AutomatedChaos

+0

Sry,我是新來的Stackoverflow ...我標記了它!感謝您的建議! – user3073688