次のコード スニペットは、XSD 拡張関数を使用して、XSD データ型に基づいてノードを返す方法を示します。このサンプル コードでは、type-is 関数を使用してドキュメント内の最初の文字列のデータ型を返し、type-local-name 関数を使用して文字列データ型の一連のノードを返します。
Visual Basic コードは 1 つの XMLSchemaCache50
オブジェクトを作成し、名前空間 URI 宣言 (urn:books
) とスキーマ (books.xsd) をオブジェクトに追加し、次に DOMDocument
オブジェクトの schemas
プロパティを使用してスキーマを参照します。コード中で SelectionLanguage
プロパティを XPath にセットし、SelectionNamespaces
プロパティを "xmlns:ms='urn:schemas-microsoft-com:xslt"
にセットして ms:
名前空間プレフィックスが使用できるようにしていることに注意してください。books.xml ファイルが DOMDocument
オブジェクトに読み込まれたときに検証が実行されます。検証エラーは DOMDocument
オブジェクトの parseError
プロパティを使用して返されます。
この例を実行する方法
以下に示すコードを Command1_Click プロシージャにコピーします。完了した際には、以下のコード スニペットと類似したコードとなるはずです。
Visual Basic のツール バーで [開始] をクリックし、次に [form1] 上の [Command1] をクリックします。
この例を実行すると、Set objNodeList = xmldom.selectNodes "//*[ms:type-is('http://www.w3.org/2001/XMLSchema','string')]")
ステートメントにより文字列データ型のノードの一覧が返されます。For/Next ループにより各ノードが処理され、メッセージ ボックスに各ノードのテキストが表示されます。
Private Sub Command1_Click()
Dim xmlschema As Msxml2.XMLSchemaCache50
Set xmlschema = New Msxml2.XMLSchemaCache50
Dim xmldom As Msxml2.DOMDocument50
Set xmldom = New Msxml2.DOMDocument50
Dim objElem As IXMLDOMNode
Dim objNodeList As IXMLDOMNodeList
xmlschema.Add "urn:books", App.Path & "\books.xsd"
Set xmldom.schemas = xmlschema
xmldom.setProperty "SelectionLanguage", "XPath"
xmldom.setProperty "SelectionNamespaces", "xmlns:ms='urn:schemas-microsoft-com:xslt'"
xmldom.async = False
xmldom.Load App.Path & "\books.xml"
'returns a list of nodes with the string data type
Set objNodeList = xmldom.selectNodes _
("//*[ms:type-is('http://www.w3.org/2001/XMLSchema','string')]")
For i = 0 To (objNodeList.length - 1)
MsgBox objNodeList.Item(i).Text
Next
If xmldom.parseError.errorCode <> 0 Then
MsgBox xmldom.parseError.errorCode & " " & xmldom.parseError.reason
Else
MsgBox "No Error"
End If
End Sub