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

我想获得VBA中的单个节点的属性,但不能使用DOM来pipe理它,当我希望它是不区分大小写的

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线在评论两种不同的方式,我试图在本网站播种解决scheme后,但显然这些解决scheme将无法正常工作** VBA – ** Excel ****我得到运行时错误“-2147467259(80004005); '未知的方法

由于XPATH 2.0function是不可能的,因为MSXML不支持XPath 2.0 *grr*比较属性内容的唯一可能是不区分大小写将使用翻译function。

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

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

如果属性值总是大写

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

也将适合。

你应该可以像使用小写函数一样匹配它,但是属性的名称是区分大小写的,所以你需要@Name而不是@name。

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