You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB中通过MSXML.DOMDocument获取XML的push-id属性值

问题:提取XML节点的push-id属性值

我用VB结合MSXML.DOMDocument编写了XML数据提取函数,用于处理远程服务返回的XML片段。当前函数可正常提取address节点文本与response-result节点的code属性值,但无法回忆起如何将<push-response>节点的push-id属性(GUID格式)赋值给初始化为"rubbish"的变量sMessageID,现需补充对应的VB代码行。

相关XML片段

<pap>
  <push-response push-id="99c2d0d3-6cce-4207-88c4-54bc8e852501">
    <address address-value="WIN">5557489580</address>
    <response-result code="1000"/>
  </push-response>
</pap>

现有VB函数代码

<%@ Page Language="VB" explicit="true" validateRequest="false" %>
<%@ Import namespace="ADODB" %>
<%@ Import namespace="WinHttp" %>
<%@ Import namespace="MSXML" %>
<%@ Import namespace="Scripting" %>

<script language="VB" runat="Server">

Function ExtractDataFromXML2(ByRef sInputXML As String) As String
Dim XMLDom As MSXML.DOMDocument
Dim currNode As MSXML.IXMLDOMNodeList
Dim Node As MSXML.IXMLDOMNode
Dim sError As String
Dim sMessageID As String
Dim sResult As String

XMLDom = New MSXML.DOMDocument
XMLDom.async = False
If (XMLDom.loadXML(sInputXML) = False) Then
    sResult = "XML Parse Error: " & XMLDom.parseError.reason & " code=" & XMLDom.parseError.errorCode & " " & Chr(13) & Chr(10)
Else
    currNode = XMLDom.selectNodes("//push-response")
    For Each Node In currNode
        sError = Node.selectSingleNode("response-result").attributes.getNamedItem("code").Text
        sMessageID = "rubbish"
        If sError = "1000" Then
            sResult = Node.selectSingleNode("address").Text & "@" & sMessageID
        Else
            sResult = "Error " & sError & ": " & Node.selectSingleNode("response-result").attributes.getNamedItem("desc").Text          
        End If
    Next Node
End If
ExtractDataFromXML2 = sResult
End Function

</script>

解决方案

你只需要在sMessageID = "rubbish"这一行之后,添加一行代码来获取<push-response>节点的push-id属性值,有两种常用方式:

方式1:使用attributes.getNamedItem方法

sMessageID = Node.attributes.getNamedItem("push-id").Text

方式2:使用getAttribute方法(更简洁)

sMessageID = Node.getAttribute("push-id")

修改后的循环部分代码如下:

For Each Node In currNode
    sError = Node.selectSingleNode("response-result").attributes.getNamedItem("code").Text
    sMessageID = "rubbish"
    ' 新增代码获取push-id属性
    sMessageID = Node.getAttribute("push-id")
    If sError = "1000" Then
        sResult = Node.selectSingleNode("address").Text & "@" & sMessageID
    Else
        sResult = "Error " & sError & ": " & Node.selectSingleNode("response-result").attributes.getNamedItem("desc").Text          
    End If
Next Node

内容的提问来源于stack exchange,提问作者Emsg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:07:10