标题中提到的问题出现在使用 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 …………
锦江之十
====================