次の方法で共有


Visual Basic XSD 拡張関数のコード

次のコード スニペットは、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 プロパティを使用して返されます。

この例を実行する方法

  1. 以下に示すコードを Command1_Click プロシージャにコピーします。完了した際には、以下のコード スニペットと類似したコードとなるはずです。

  2. 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