0

标题中提到的问题出现在使用 selectSingleNodes 中。我相信这与方法的 xPath 有关。我在下面的代码中用“<===== HERE”表示了有问题的行

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

在 A 行为“//corp_name”的情况下,如果在 HERE B 行中使用“corp_name”和“/corp_name”,则会发生运行时错误。所以我也被迫在 B 行中使用“//corp_name”。但是,随后出现了标题的问题。在 10 个节点中,只有第一个节点被重复。这似乎是合乎逻辑的,因为该方法本身返回第一个节点。但是,我怎样才能提取所有不同的节点?我希望循环会照顾每个节点。但显然它没有,否则......这是我从互联网复制的代码中不明白的东西。

我的测试选项似乎耗尽了。事实上,这是我第一次尝试使用 API、XML 和 MSXML2,这意味着应该有一些我在没有完全理解的情况下使用的东西。因此,如果你们中的任何人能指出似乎被滥用的内容,那将是一个很大的帮助。

请帮忙!

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

子 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

血脑屏障 222

CCC 333 …………

锦江之十

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

4

0 回答 0