我在 Outlook 2017 的集成开发环境中有一个 Outlook 宏。
该宏在 xml 文件中搜索包含发件人邮件地址的条目,以找到相应的“No.”。
如果 xml 文件在文件开头不包含 xml 声明,则此方法有效。
我得到的所有文件都以这个 xml 标记开头,我的应用程序无法处理该文件。
我用来解析文件的代码如下所示:
Private Function GetVendorNoFromFile(filepath As String, oMail As Outlook.MailItem) As String
Set oXMLFile = CreateObject("Microsoft.XMLDOM")
oXMLFile.Load (filepath)
Set Vendors = oXMLFile.GetElementsByTagName("Vendor")
For Each vendor In Vendors
If LCase(vendor.SelectSingleNode("E-Mail").Text) = LCase(GetSMTPMailAdress(oMail)) Then
GetVendorNoFromFile = vendor.SelectSingleNode("No.").Text
Exit For
End If
Next
End Function
如果文件如下所示,它将起作用:
<Vendors>
<Vendor>
<No.>No1</No.>
<E-Mail>Mail1</E-Mail>
</Vendor>
<Vendor>
<No.>No2</No.>
<E-Mail>Mail2</E-Mail>
</Vendor>
</Vendors>
但如果文件如下所示,则不会:
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<Vendors>
<Vendor>
<No.>No1</No.>
<E-Mail>Mail1</E-Mail>
</Vendor>
<Vendor>
<No.>No2</No.>
<E-Mail>Mail2</E-Mail>
</Vendor>
</Vendors>
更准确地说:变量“oXMLFile”有一个属性“childNodes”,它的计数为 1,包含第一个 xml 文件的标签“Vendors”,但如果我使用第二个 xml 文件,它的计数为零使用 xml 声明。
我尝试在加载文件之前添加这些行中的任何一行
oXMLFile.async = False
oXMLFile.validateOnParse = False
但这并没有改变什么。
我可以在网上找到的所有示例都以与我相同的方式执行此操作,但它们似乎适用于包含 xml 声明的文件。