VB6 DomDocument更新节点/创建新节点

时间:2011-10-26 18:27:42

标签: xml vb6 domdocument

我正在尝试将用户名和密码child放入XML元素中。我想要它,以便当用户输入他们的信息时,它将检查元素是否存在。如果是,它将检查它是否不同。如果不同,它会更新。如果它不存在,它将创建一个新的孩子。

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

非常感谢任何帮助!

非常感谢!!!

1 个答案:

答案 0 :(得分:2)

最简单的方法是利用XPATH来提取你的元素。 XPATH选择器/ ServersList / Server [ServiceName / text()='myServiceName'将提取所有具有ServiceName子元素的Server元素,该元素的文本与您的服务名称匹配。假设只存在一个这样的元素,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