VBA 上的 xpath 中不区分大小写的匹配?

case-insensitive matching in xpath on VBA?

我正在尝试获取 VBA 中单个节点的属性,但是当我希望它 不区分大小写时无法使用 DOM 对其进行管理

VBA:

Dim oDoc As New MSXML2.DOMDocument30
Dim el As Object
Dim XML As String

XML =("C:\........")

oDoc.validateOnParse = True
oDoc.Load XML  


dim Name as String
Name= "yaron"


  'select the User node with Name="Yaron"
    Set el = oDoc.SelectSingleNode("/GetUserInfo/User[@Name='" & Name & "']")
   'Set el = oDoc.SelectSingleNode("/GetUserInfo/User[matches(@Name, 'Name ' ,'i')]")    
   'Set el = oDoc.SelectSingleNode("/GetUserInfo/User[lower-case(@Name)='" & Name & "']")


    If Not el Is Nothing Then
    Debug.Print el.getAttribute("LoginName")
Else
    Debug.Print "user id not found!"
End If

XML:

  <GetUserInfo>
           <User ID="16" Name="DAVID" LoginName="login1"/>
           <User ID="17" Name="GAL" LoginName="login2"/>
           <User ID="18" Name="YARON" LoginName="login3"/>
  </GetUserInfo>

2 行评论我在本网站播种解决方案后尝试的两种不同方式, 但显然这些解决方案不适用于 **VBA-**Excel**** 我得到 运行-时间错误 '-2147467259(80004005); '未知方法

您应该可以像您尝试的那样使用小写函数匹配它,但是属性的名称区分大小写,因此您需要@Name 而不是@name。

Set el = oDoc.SelectSingleNode("/GetUserInfo/User[lower-case(@Name)='" & Name & "']")

由于 XPATH 2.0 函数不可用,因为 MSXML 不支持 XPath 2.0 *grr* 比较属性内容时不区分大小写的唯一可能性是使用 translate功能。

    Dim oDoc As New MSXML2.DOMDocument60
...
    Set el = oDoc.SelectSingleNode("/GetUserInfo/User[translate(@Name, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')='" & UCase(sName) & "']")

这至少需要 Microsoft XML, v4.0,更好 Microsoft XML, v6.0Microsoft XML, v3.0 (MSXML2.DOMDocument30) 不适合。

如果属性值总是大写,则

Set el = oDoc.SelectSingleNode("/GetUserInfo/User[@Name='" & UCase(sName) & "']")

也适合。