Excel2016のVBAで、XMLを使った処理をしています。
例えば、以下のようなXMLファイル(UTF-8で保存)を用意して、
XML
1<?xml version="1.0" encoding="UTF-8"?> 2<組織> 3 <ユーザ class="cls" id="AAA" 名前="やまだ たろう"/> 4 <ユーザ class="cls" id="BBB" 名前="さとう じろう"/> 5</組織>
VBAで読み込みます。
※とりあえずモジュールで。あくまでサンプルなので細かい書き方は無視してください。
VB
1Dim dom As New MSXML2.DOMDocument 2’以下試しましたが全部同じでした 3'DOMDocument 4'DOMDocument26 5'DOMDocument30 6'DOMDocument60 7 8Sub Test() 9 dom.Load "C:\前述の\XMLファイル.xml" 10 dom.setProperty "SelectionLanguage", "XPath" 11End Sub 12
この後、読み込んだXMLの検索を実装するために以下のような関数を用意したところ、
1バイト文字は正常に動くのに2バイト文字だと検索に引っ掛かりません。
VB
1Sub Search(Text As String) 2 Dim nl As IXMLDOMNodeList 3 4 'XPathのcontains関数で、指定のキーワードを含む属性を持つノードを検索 5 Set nl = dom.SelectNodes("//*[contains(@*, '" & Text & "')]") 6 7 MsgBox nl.Length & "件見つかりました!!" 8End Sub 9 10 11Call Search("AA") ’⇒「1件見つかりました!!」 12Call Search("ろう") ’⇒「0件見つかりました!!」 ※期待値は2件見つかる 13
属性を「@*」でワイルドカード指定しているにもかかわらず、ノードの最初の属性しか見に行かないような動きになります。
どなたか解決方法ご存じの方いらっしゃいましたらご教授お願いいたします。
「それ無理なんだよねー!!」と言う情報でも構いません。その情報ソースをご教示いただけると助かります

回答1件
あなたの回答
tips
プレビュー