The following code snippet shows how you can use XSD extension functions to return nodes based on their XSD data type. This example code uses the type-is function to return the first string data type in the document and the type-local-name function to return a list of nodes of the string data type.
The Visual Basic code creates an XMLSchemaCache50
object, adds the namespace URI declaration (urn:books
) and the schema (books.xsd) to the object, and then references the schema using the schemas
property of the DOMDocument
object. Notice in the code that the SelectionLanguage
property is set to XPath and the SelectionNamespaces
property is set to "xmlns:ms='urn:schemas-microsoft-com:xslt"
enabling the ms:
namespace prefix to be used. the Validation is performed when the books.xml file is loaded into the DOMDocument
object. Validation errors are returned using the parseError
property of the DOMDocument
object.
To run the example
When you run the example, the Set objNodeList = xmldom.selectNodes "//*[ms:type-is('http://www.w3.org/2001/XMLSchema','string')]")
statement returns a list of nodes of data type string. The For/Next loop interates through the nodes and displays the text of each node in a message box.
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