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

使用MSXML2解析xml的问题是:当应该列出十个不同的节点时,第一个节点会重复,xml,api,selectsinglenode,msxml2,Xml,Api,Selectsinglenode,Msxml2,标题中提到的问题发生在使用selectSingleNodes时。我相信这与方法的xPath有关。我在下面的代码中用“Hi Pine Paul,包含您试图解析的XML会很有帮助使用//corp_name,然后在列表中循环,并使用//corp_name重新获取列表。在循环中,只需使用xnode.Text。或者如果corp_name在循环中包含corp_name元素,则使用/corp_name而不是//corp_name。如果我没记错的话,没有XML就说不上来。MSXML2非常古老,早于W3C XPa

标题中提到的问题发生在使用selectSingleNodes时。我相信这与方法的xPath有关。我在下面的代码中用“Hi Pine Paul,包含您试图解析的XML会很有帮助使用//corp_name,然后在列表中循环,并使用//corp_name重新获取列表。在循环中,只需使用xnode.Text。或者如果corp_name在循环中包含corp_name元素,则使用/corp_name而不是//corp_name。如果我没记错的话,没有XML就说不上来。MSXML2非常古老,早于W3C XPath 1.0规范,therefore支持自己的XPath预标准化版本。谢谢大家。作为对William的回应,我添加了XML和代码生成的结果。此外,我还更详细地重新表述了以前测试中发生的事情。再次感谢。您好,William,我使用xnode.Text删除调试行的原因是我需要更多。可以看出,这对“corp_name”和“rcept_no”是必需的,因此“rcept_no”的相同问题应该得到解决。我还没有解决这个问题。但我开始认为要问的问题不是被问的问题,而是为什么B行中的“corp_name”会给出运行时错误?
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
 
 <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>