selectSingleNodeメソッドはXML文書から任意の1ノード(IXMLDOMNode)を取得するメソッドです。
引数にはXPathで検索条件を指定します。次のようなXML文書を考えてみます。
<!-- lcid.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LocaleId>
<language cd="ja">
<LCID>1041</LCID>
<langName>日本語</langName>
</language>
<language cd="en-us">
<LCID>1033</LCID>
<langName>英語 (U.S.)</langName>
</language>
<language cd="en-gb">
<LCID>2057</LCID>
<langName>英語 (U.K.)</langName>
</language>
<language cd="fr">
<LCID>1036</LCID>
<langName>フランス語 (フランス)</langName>
</language>
<language cd="de">
<LCID>1031</LCID>
<langName>ドイツ語 (ドイツ)</langName>
</language>
<language cd="zh-cn">
<LCID>2052</LCID>
<langName>中国語 (中華人民共和国)</langName>
</language>
<language cd="ko">
<LCID>1042</LCID>
<langName>韓国語</langName>
</language>
</LocaleId>
まず、言語コード(language要素のcd属性)が「de」であるlanguage要素を取得して、ロケールID(LCID)と言語名(langName)を表示してみます。
Dim DOM, docRoot, node
Set DOM = WScript.CreateObject("Microsoft.XMLDOM")
DOM.async = True
DOM.load("data\lcid.xml")
Set docRoot = DOM.documentElement
Set node = docRoot.selectSingleNode("/LocaleId/language[@cd='de']")
WScript.Echo "LCID=" & node.childNodes(0).firstChild.nodeValue
WSCript.Echo "LCID=" & node.childNodes.item(0).firstChild.nodeValue
WScript.Echo "言語名=" & node.childNodes(1).firstChild.nodeValue
Set node = Nothing
Set docRoot = Nothing
Set DOM = Nothing
上記①と②は同じ意味です。結果は次のようになります。
LCID=1031
LCID=1031
言語名=ドイツ語 (ドイツ)
次は、ロケールIDが「1036」である言語名を取得してみます。
Dim DOM, docRoot, node
Set DOM = WScript.CreateObject("Microsoft.XMLDOM")
DOM.async = True
DOM.load("data\lcid.xml")
Set docRoot = DOM.documentElement
Set node = docRoot.selectSingleNode("/LocaleId/language[LCID='1036']/langName")
WScript.Echo "言語名=" & node.firstChild.nodeValue
Set node = Nothing
Set docRoot = Nothing
Set DOM = Nothing
結果は次のようになります。
言語名=フランス語 (フランス)
今度は、ロケールIDが「1041」である言語コードを取得してみます。
Dim DOM, docRoot, node
Set DOM = WScript.CreateObject("Microsoft.XMLDOM")
DOM.async = True
DOM.load("data\lcid.xml")
Set docRoot = DOM.documentElement
Set node = docRoot.selectSingleNode("/LocaleId/language[LCID='1041']")
WScript.Echo "言語コード=" & node.getAttribute("cd")
WScript.Echo "言語コード=" & node.attributes(0).firstChild.nodeValue
WScript.Echo "言語コード=" & node.attributes.item(0).firstChild.nodeValue
WScript.Echo "言語コード=" & node.attributes.getNamedItem("cd").nodeValue
Set node = Nothing
Set docRoot = Nothing
Set DOM = Nothing
上記4つの結果は次のように全て同じになります。
言語コード=ja
言語コード=ja
言語コード=ja
言語コード=ja