xml - 在 VB6 中替换 XML 节点中的值
问题描述
我的目标是使用 MSXML2.DOMDocument 在 VB6 的 XML 节点中查找和替换(id、name、status)的值。我正在使用旧代码,但我没想到会这么难,我可以使用 getElementsByTagName 从 xml 中提取我需要的确切节点。我目前为每个值设置了 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">
但相反,id、name 和 inactive 在 XML 中保持相同的值。一般结构是这样的
<groups>
<group>
<offerstatus/>
</group>
</groups>
如果这有帮助的话。然后我就可以访问节点了offerstatus
。
解决方案
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
推荐阅读
- django - 在 django-viewflow 流程中使用 paratheses 符号
- java - input.next() 用于具有多个值的一行
- windows - 应用程序无法在另一台计算机上正常运行
- html - 如何使两列具有相同的高度和响应
- c++ - Xcode中c ++结构的内存布局不一致
- google-cloud-platform - 如何减少 Google Cloud SQL 实例大小?
- java - 简单的 java TCP 客户端
- angular - Primeng 使用样式时找不到不同的支持对象“宽度:100%”
- c# - 如何将主详细信息页面中的导航栏标题名称部分更改为选项卡式页面菜单?
- html - Bootstrap 4 - 选择大于 1 px 的边框