Замена значений в узле XML в VB6 - PullRequest
0 голосов
/ 30 апреля 2019

Моя цель - найти и заменить значения (id, name, status) в XML-узле в VB6, используя MSXML2.DOMDocument.Я работаю со старым кодом, но я не ожидал, что это будет так сложно, я могу получить нужный мне узел из xml с помощью getElementsByTagName.В настоящее время у меня есть setAttributes для каждого значения, но он не меняет узел в XML.

Dim oDOMOffer As New MSXML2.DOMDocument
Dim oldPendingNode As IXMLDOMElement
Dim newActiveNode As IXMLDOMElement
Dim sXMLGroup As String
Dim strId As String
Dim strName As String
Dim strInactive As String

On Error GoTo ErrHandler

'---
TraceEntry m_sProgID, csFunction
TraceParams m_sProgID, csFunction, Array("sXMLOffer", "sXMLOrigOffer"), Array(sXMLOffer, sXMLOrigOffer)
'---



'---
TraceEntry m_sProgID, csFunction
TraceParams m_sProgID, csFunction, Array("sXMLOffer", "sXMLGroup"), Array(sXMLOffer, sXMLGroup)
'---

'Take what we can get...
sXMLGroup = sXMLOffer

' Create a new element.
strId = "1"
strName = "ACTIVE"
strInactive = "FALSE"
''''''''newActiveNode = "<" & "offerstatus id='1' name='ACTIVE' inactive='FALSE'" & ">"


If oDOMOffer.loadXML(sXMLOffer) = True Then
    If Not oDOMOffer.getElementsByTagName("group").nextNode Is Nothing Then
    sXMLGroup = oDOMOffer.getElementsByTagName("group").nextNode.XML

        'sXMLGroup = oDOMOffer.getElementsByTagName("offerstatus").nextNode.XML
        'oldPendingNode = sXMLGroup
        'oDOMOffer = oDOMOffer.replaceChild(newActiveNode, oldPendingNode).XML

        ' For starting User Name.
        Set newActiveNode = oDOMOffer.createElement("offerstatus")

         ' Create an attribute and set its value to that of the new.
        newActiveNode.setAttribute "id", strId
        newActiveNode.setAttribute "name", strName
        newActiveNode.setAttribute "inactive", strInactive

        oDOMOffer.documentElement.appendChild newActiveNode

        '---
        Trace m_sProgID, csFunction, "sXMLOfferstatus:" & sXMLGroup
        '---

        '---
        'Trace m_sProgID, csFunction, "newActiveNode:" & newActiveNode
        '---
        sXMLGroup = oDOMOffer.getElementsByTagName("group").nextNode.XML


        '---
        Trace m_sProgID, csFunction, "NewsXMLGroup:" & sXMLGroup
        '---
    Else
        '---
        Trace m_sProgID, csFunction, "ERROR: <group> node not found in sXMLOffer document text"
        '---
    End If
End If

Мои ожидаемые результаты будут

<offerstatus id="1" name="ACTIVE" inactive="FALSE">

, но вместо этого идентификатор, имя и неактивный сохраняют те же значения в XML.Общая структура такова:

<groups>
  <group>
    <offerstatus/>
  </group>
</groups>

, если это поможет.Тогда я могу получить доступ к узлу offerstatus.

1 Ответ

1 голос
/ 30 апреля 2019
Dim oDOMOffer As New MSXML2.DOMDocument
Dim newActiveNode As IXMLDOMElement
Dim objNode As IXMLDOMNode
Dim objOffer As IXMLDOMElement
Dim sXMLGroup As String

On Error GoTo ErrHandler

'---
TraceEntry m_sProgID, csFunction
TraceParams m_sProgID, csFunction, Array("sXMLOffer", "sXMLOrigOffer"), Array(sXMLOffer, sXMLOrigOffer)
'---

'Take what we can get...
sXMLGroup = sXMLOffer

TraceParams m_sProgID, csFunction, Array("sXMLGroup"), Array(sXMLGroup)


If oDOMOffer.loadXML(sXMLOffer) = True Then
    If Not oDOMOffer.getElementsByTagName("group").nextNode Is Nothing Then
    sXMLGroup = oDOMOffer.getElementsByTagName("group").nextNode.XML

        Set objNode = oDOMOffer.getElementsByTagName("offerstatus").nextNode
        Set newActiveNode = objNode

        newActiveNode.setAttribute "id", "1"
        newActiveNode.setAttribute "name", "ACTIVE"
        newActiveNode.setAttribute "inactive", "FALSE"

        '---
        sXMLGroup = oDOMOffer.getElementsByTagName("offerstatus").nextNode.XML

        '---
        Trace m_sProgID, csFunction, "NewsOfferStatus:" & sXMLGroup
        '---
    Else
        '---
        Trace m_sProgID, csFunction, "ERROR: <group> node not found in sXMLOffer document text"
        '---
    End If
End If
...