2011-10-26 12 views
0

ユーザー名とパスワードの子をXML要素に入れようとしています。ユーザーが情報を入力すると、その要素が存在するかどうかをチェックします。そうであれば、違うかどうかをチェックします。それが異なっていれば更新されます。それが存在しない場合は、新しい子を作成します。VB6 DomDocument更新ノード/新規ノードを作成

XML:

<ServersList> 
    <Server> 
     <ServiceName>Test Service</ServiceName> 
     <Url requestQuery="default">http://localhost</Url> 
     <DefaultLayers filter="off"></DefaultLayers> 
    </Server> 
</ServersList> 

多くのサーバーがあるので、私はサービス名「テストサービス」を使用してサーバーを検索して、チェックを実行します。

DOMDOCUMENTを作成するVBコードは次のとおりです。

Dim xmlDocServers As DOMDocument 
Dim XMLFile As String 

XMLFile = projectpath & "\system\WMS_Servers.xml" 
If Not (ehfexist(XMLFile)) Then Exit Sub 

Set xmlDocServers = New DOMDocument 
xmlDocServers.async = False 
xmlDocServers.resolveExternals = False 
xmlDocServers.validateOnParse = False 

xmlDocServers.load XMLFile 

ご協力いただければ幸いです。

ありがとうございます!

答えて

2

これを行う最も簡単な方法は、XPATHを利用して要素を引き出すことです。 XPATHセレクタ/ ServersList/Server [ServiceName/text()= 'myServiceName'は、サービス名に一致するテキストを持つServiceName子要素を持つすべてのServer要素を引き出します。そのような要素が1つだけ存在すると仮定すると、selectSingleNode()はセレクタに一致する最初の要素を選択します。

ノードを取得した場合は、それが何であれ「差異」のテストを行う必要があります。異なる場合は、必要な方法で更新する必要があります。ノードが見つからなかった場合は作成されており、ノードを更新する必要があると仮定します。

完了したら、xmlDocServersオブジェクトのSave()を呼び出すことを忘れないでください!

Private Sub CheckServer(ByRef xmlDocServers As MSXML2.DOMDocument, ByRef serviceName As String) 

    Dim xmlService   As MSXML2.IXMLDOMElement 
    Dim updateOtherValues As Boolean 

    Set xmlService = xmlDocServers.selectSingleNode("/ServersList/Server[ServiceName/text()='" & serviceName & "']") 

    ' If nothing was returned, then we must create a new node. 
    If xmlService Is Nothing Then 
     Set xmlService = xmlDocServers.createElement("Server") 
     xmlService.Text = serviceName 
     xmlDocServers.documentElement.appendChild xmlService 
     updateOtherValues = True 
    Else 
     updateOtherValues = IsDifferent(xmlService) 
    End If 

    If updateOtherValues Then 
     DoUpdateOtherValues xmlService 
    End If 

End Sub 

Private Function IsDifferent(ByRef xmlService As MSXML2.IXMLDOMElement) As Boolean 
    IsDifferent = True 
End Function 

Private Sub DoUpdateOtherValues(ByRef xmlService As MSXML2.IXMLDOMElement) 
    ' 
End Sub 
関連する問題