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.0
function是不可能的,因为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.0
。 Microsoft XML, v3.0
( MSXML2.DOMDocument30
)将不适合。
如果属性值总是大写
Set el = oDoc.SelectSingleNode("/GetUserInfo/User[@Name='" & UCase(sName) & "']")
也将适合。
你应该可以像使用小写函数一样匹配它,但是属性的名称是区分大小写的,所以你需要@Name而不是@name。
Set el = oDoc.SelectSingleNode("/GetUserInfo/User[lower-case(@Name)='" & Name & "']")