如何在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
相关产品推荐
相关产品推荐

