无法分析XML以获取VBA中的特定信息
我一直在为我的业务构建一个小bot,有必要将多个XML文件同时上传到Excel中,以执行bot的其余部分。我已经成功地使用一个循环上载了多个XML,但是,由于所有XML的格式都不相同,因此只有必要将所需的信息上载到Excel中。我查找了不同的来源,但看起来我做得不对。到目前为止,我上传多个XML的相关VBA代码如下:无法分析XML以获取VBA中的特定信息,xml,vba,xml-parsing,Xml,Vba,Xml Parsing,我一直在为我的业务构建一个小bot,有必要将多个XML文件同时上传到Excel中,以执行bot的其余部分。我已经成功地使用一个循环上载了多个XML,但是,由于所有XML的格式都不相同,因此只有必要将所需的信息上载到Excel中。我查找了不同的来源,但看起来我做得不对。到目前为止,我上传多个XML的相关VBA代码如下: Application.ScreenUpdating = False Application.DisplayAlerts = False With Sheets(
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Sheets("Working Notes")
lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
For i = 1 To lastrow
strTargetFile = .Cells(i, "A")
Set Wb = Workbooks.OpenXML(FileName:=strTargetFile, LoadOption:=xlXmlLoadImportToList)
'wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Working Notes").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
Wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Working Notes").Range("B" & i)
Wb.Close False
Next i
End With
我看到的XML页面是这样的
<?xml version="1.0" encoding="utf-8"?>
<abcd_omn_gatca:abcd_omn xmlns:abcd="urn:lu:etat:acd:abcd_omn:v2.0" xmlns:ftc="urn:lu:etat:acd:gatca:v2.0" xmlns:sfa="urn:oecd:ties:stfgatcatypes:v2" xmlns:abcd_omn_gatca="urn:lu:etat:acd:abcd_gatca:v2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="urn:lu:etat:acd:abcd_gatca:v2.0 abcd_gatca_V2.0.xsd">
<abcd_omn_gatca:abcd_gatca>
<abcd_omn_gatca:abcd_RefId>XXXXX</abcd_omn_gatca:abcd_RefId>
<abcd_omn_gatca:abcd_Depositor>
<abcd:NameDepositor>XXXXX</abcd:NameDepositor>
<abcd:PersonalIdentificationNumberDepositor>XXXXX</abcd:PersonalIdentificationNumberDepositor>
<abcd:AddressDepositor>
<abcd:StreetPhysical>XXXXX</abcd:StreetPhysical>
<abcd:NumberPhysical>XXXXX</abcd:NumberPhysical>
<abcd:PostalCodePhysical>XXXXX</abcd:PostalCodePhysical>
<abcd:CityPhysical>XXXXX</abcd:CityPhysical>
<abcd:CountryPhysical>XXXXX</abcd:CountryPhysical>
</abcd:AddressDepositor>
<abcd:PersonDepositor>
<abcd:Name>XXXXX</abcd:Name>
<abcd:FirstName>XXXXX</abcd:FirstName>
<abcd:EmailPersonal>XXXXX</abcd:EmailPersonal>
<abcd:TelephoneDirect>XXXXX</abcd:TelephoneDirect>
</abcd:PersonDepositor>
</abcd_omn_gatca:abcd_Depositor>
<abcd_omn_gatca:abcd_Declarer>
<abcd:NameDeclarer>XXXXX</abcd:NameDeclarer>
<abcd:PersonalIdentificationNumberDeclarer>XXXXX</abcd:PersonalIdentificationNumberDeclarer>
<abcd:AddressDeclarer>
<abcd:StreetPhysical>XXXXX</abcd:StreetPhysical>
<abcd:NumberPhysical>XXXXX</abcd:NumberPhysical>
<abcd:PostalCodePhysical>XXXXX</abcd:PostalCodePhysical>
<abcd:CityPhysical>XXXXX</abcd:CityPhysical>
<abcd:CountryPhysical>XXXXX</abcd:CountryPhysical>
</abcd:AddressDeclarer>
<abcd:PersonDeclarer>
<abcd:Name>XXXXX</abcd:Name>
<abcd:FirstName>XXXXX</abcd:FirstName>
<abcd:EmailPersonal>XXXXX</abcd:EmailPersonal>
<abcd:EmailOrganisation>XXXXX</abcd:EmailOrganisation>
<abcd:TelephoneDirect>XXXXX</abcd:TelephoneDirect>
</abcd:PersonDeclarer>
</abcd_omn_gatca:abcd_Declarer>
<abcd_omn_gatca:abcd_ReportingPerson>
***<abcd:NameReportingPerson>RENIN III S.A R.L.</abcd:NameReportingPerson***>
<abcd:IdentificationNumber>XXXXX</abcd:IdentificationNumber>
<abcd:IdentificationNumberExtension>XXXXX</abcd:IdentificationNumberExtension>
<***abcd:AddressReportingPerson>
<abcd:StreetPhysical>Avenue M.F. Brady</abcd:StreetPhysical>
<abcd:NumberPhysical>45</abcd:NumberPhysical>
<abcd:PostalCodePhysical>1234</abcd:PostalCodePhysical>
<abcd:CityPhysical>Somethingburg</abcd:CityPhysical>
<abcd:CountryPhysical>SB</abcd:CountryPhysical>
</abcd:AddressReportingPerson>***
<abcd:PersonContactReportingPerson>
<abcd:Name>XXXXX</abcd:Name>
<abcd:FirstName>XXXXX</abcd:FirstName>
<abcd:EmailPersonal>XXXXX</abcd:EmailPersonal>
<abcd:EmailOrganisation>XXXXX</abcd:EmailOrganisation>
<abcd:TelephoneDirect>XXXXX</abcd:TelephoneDirect>
</abcd:PersonContactReportingPerson>
</abcd_omn_gatca:abcd_ReportingPerson>
<abcd_omn_gatca:RFI_Identifier>XXXXX</abcd_omn_gatca:RFI_Identifier>
<abcd_omn_gatca:ReportContent>
<abcd_omn_gatca:ReportingPeriod>XXXXX</abcd_omn_gatca:ReportingPeriod>
<abcd_omn_gatca:ZeroReporting>XXXXX</abcd_omn_gatca:ZeroReporting>
</abcd_omn_gatca:ReportContent>
</abcd_omn_gatca:abcd_gatca>
</abcd_omn_gatca:abcd_omn>
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
***肾素III S.A R.L。
XXXXX
XXXXX
布雷迪大街
45
1234
某物堡
某人
***
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
我唯一需要的信息是报告人的姓名“RENIN III S.A R.L.”以及Excel表格上报告人的地址。请原谅我对VBA的知识非常不成熟。如有任何帮助,我将不胜感激。非常感谢 删除“***”
后,我从文件(test.XML
)加载了您的XML。如果包含对所需命名空间的引用,则可以按如下方式访问:
Option Explicit
Public Sub testing()
Dim xmlDoc As New MSXML2.DOMDocument60
xmlDoc.validateOnParse = True
xmlDoc.setProperty "SelectionNamespaces", "xmlns:abcd=""urn:lu:etat:acd:abcd_omn:v2.0"""
If xmlDoc.Load("C:\Users\User\Desktop\test.xml") Then
Dim node As Object
Debug.Print xmlDoc.SelectNodes("//abcd:AddressReportingPerson").Length
Debug.Print xmlDoc.SelectNodes("//abcd:NameReportingPerson").Length
For Each node In xmlDoc.SelectNodes("//abcd:AddressReportingPerson")
Debug.Print node.Text
Next node
For Each node In xmlDoc.SelectNodes("//abcd:NameReportingPerson")
Debug.Print node.Text
Next node
Else
Debug.Print "Houston, we have a problem!"
End If
End Sub
为什么不使用Microsoft XML库来解析?设置文件的
ADODB.Connection
并查询它们可能会更容易、更灵活@铁皮人-我已经通过这篇文章,并试图同样。我想我无法正确输入节点的名称。你能建议如何在这篇文章中实现相同的代码吗?@TinMan-阅读XML并不是真正的问题,我已经能够将多个XML上传到Excel中。我的问题更多的是如何将上传到Excel的信息量限制在我需要的节点上。这正是我的观点。解析或查询XML并加载结果。您甚至可以使用ADODB.Connection
查询文件,它会创建一个只包含相关数据的新XML文件。很抱歉,我从未响应,在我的VBA之旅中,您一直是我的帮助和导师,我非常感谢。你的代码不是我想要的,但是让我朝着正确的方向开始了。再次感谢!别担心。您可以随时添加您的解决方案—记住!:-)