2013-12-09 3 views
0

XML 노드가 이미 존재하는 경우 내 VBScript를 체크인하고 싶습니다. 이 경우 Node를 다시 추가해서는 안되며 대신 데이터를 업데이트해야합니다. 내가 해결할 수있는 방법이 있습니까? 여기 내 코드는 다음과 같습니다.
스크립트가 실행되면 컴퓨터 데이터가있는 새 노드가 생성됩니다. (새 서버 또는 하드 디스크가 추가 된 경우) 누락 된 사항은 노드가 이미있는 경우 최신 데이터로 업데이트된다는 것입니다.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

관련 문제