微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用MSXML2进行xml解析的问题:当应列出十个不同的节点时,将重复一个第一个节点

如何解决使用MSXML2进行xml解析的问题:当应列出十个不同的节点时,将重复一个第一个节点

标题中提到的问题发生在使用selectSingleNodes时。我相信这与方法的xPath有关。我在下面的代码中用“

在这里A行中,我尝试了xnode.SelectSingleNode(“ corp_name”)。这根本没有任何节点。使用“ / corp_name”,也完全没有节点。但是在使用“ // corp_name”的当前代码中,找到了10个节点。

在A行为“ // corp_name”的情况下,如果在HERE B行中使用“ corp_name”和“ / corp_name”,则会发生运行时错误。因此,我也不得不在B行中使用“ // corp_name”。但是,随后出现了标题问题。在10个节点中,仅第一个节点重复。因为方法本身返回第一个节点,所以这似乎是合乎逻辑的。但是,如何提取所有不同的节点呢?我希望循环能够处理每个节点。但是显然,它不是,否则...这是我从Internet复制的代码中所不了解的。

我的测试选项似乎耗尽了。实际上,这是我第一次尝试使用API​​,XML和MSXML2,这意味着我在使用某些内容时可能并不完全了解。因此,如果你们中的任何一个指出可能被滥用的东西,那将是一个很大的帮助。

请帮助!

==================

sub extract_corpname_receptno()

将xml_obj昏暗为MSXML2.XMLHTTP60 设置xml_obj = New MSXML2.XMLHTTP60

base_url = "https://opendart.fss.or.kr/api/list.xml?"
param_api = "&crtfc_key="
param_api_value = CStr(Worksheets("sheet2").Range("k1").Value)
    
api_url = base_url + _
          param_api + param_api_value

xml_obj.Open bstrMethod:="GET",bstrURL:=api_url
xml_obj.send
Debug.Print "The Request was " + xml_obj.statusText

Debug.Print xml_obj.responseText
    
Dim xDoc As MSXML2.DOMDocument60
Dim xNodes As MSXML2.IXMLDOMNodeList
Dim xnode As MSXML2.IXMLDOMNode

Set xDoc = New MSXML2.DOMDocument60

    xDoc.LoadXML (xml_obj.responseText)
    If Not xDoc.LoadXML(xml_obj.responseText) Then
           MsgBox "load error"
    End If
    
Set xNodes = xDoc.SelectNodes("//corp_name") '<===== HERE A

Debug.Print xNodes.Length

Dim xChlNode As IXMLDOMNodeList
Set xChlNode = xDoc.ChildNodes.Item(1).ChildNodes

For Each xChl In xChlNode
    Debug.Print xChl.BaseName
    Debug.Print xChl.NodeType 
Next

For Each xnode In xNodes
    Debug.Print "----------------------------------"
    'Debug.Print xnode.Text
    Debug.Print xnode.SelectSingleNode("//corp_name").Text '<===== HERE B
    Debug.Print xnode.SelectSingleNode("//rcept_no").Text '<===== HERE C
Next
    
Dim wrksht As Worksheet
Set wrksht = ThisWorkbook.Worksheets("Sheet2")
    
Count = 1
For Each xnode In xNodes

    wrksht.Cells(Count,1).Value = xnode.SelectSingleNode("//corp_name").Text '<=== HERE B
    wrksht.Cells(Count,2).Value = xnode.SelectSingleNode("//rcept_no").Text '<=== HERE C

    Count = Count + 1

Next
 

结束子

==================

我要解析的XML具有以下结构:

 <list>
     <corp_name>AAA</corp_name>
     <rcept_no>111</rcept_no>
 </list>

 <list>
     <corp_name>BBB</corp_name>
     <rcept_no>222</rcept_no>
 </list>

 .....

 <list>
     <corp_name>JJJ</corp_name>
     <rcept_no>ten</rcept_no>
 </list>

==============================

上面的代码仅给出

AAA 111

AAA 111

AAA 111 .... ....

AAA 111

何时应该给予

AAA 111

BBB 222

CCC 333 .... ....

JJJ十

==================

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。