2016-12-19 20 views
2

私はVBAでの単一ノードの属性を取得しようとしていますが、私はそれが大文字と小文字を区別しないVBAのxpathで大文字と小文字を区別しない一致がありますか?

VBAになりたい時にDOMを使用して、それを管理することができません。

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: ****を**エクセル - コメント2つの異なる方法で

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

2行は、私は 、このサイトではSOWのソリューションの後にしようとしたが、どうやら、これらのソリューションは、** VBAのために動作しません。 10実行時エラー '-2147467259(80004005)が表示されます。 '不明なメソッド

答えて

2

MSXMLは、XPath 2.0 *grr*translate関数を使用する属性の内容を比較すると大文字と小文字を区別しないことが唯一の可能性をサポートしていないため、XPATH 2.0機能が可能でないからです。

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.0を必要とします。 Microsoft XML, v3.0MSXML2.DOMDocument30)は適合しません。

属性値は常に大文字されている場合は、

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

もフィットします。

+0

残念ながら私は同じエラーが発生します。多分translate関数はXPath 2.0でもうまく動作しません: – David

+0

Xmlが時々LOWERになることがあり、時には大文字の – David

+0

になる可能性があるので、私は他のオプションを使用できません。これは少なくとも 'Microsoft XML、v4.0' 'Microsoft XML、v6.0' ' Microsoft XML、v3.0'( 'MSXML2.DOMDocument30')は適合しません。 –

1

あなたは試したように小文字の関数を使用して一致させることができますが、属性の名前は大文字と小文字が区別されるため、@nameではなく@nameが必要です。

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

実行時エラー '-2147467259(80004005)が表示されます。 '不明な方法 – David

+0

多分私は参照を追加する必要がありますか? – David

関連する問題