-
Validating XML
Am trying to validate a XML document against a schema. The document validates
100% if I use XML Spy. However if I use the MSXML2.DOMDocument40 and MSXML2.XMLSchemaCache40
objects the following happens.
PLease help I can't find anything on the microsoft sites...
VB Code Example:
Private Sub Command1_Click()
Dim oXML As New MSXML2.DOMDocument40
Dim oSchema As New MSXML2.XMLSchemaCache40
oXML.async = False
oXML.validateOnParse = True
If oXML.Load("c:\person.xml") Then
oSchema.Add "uri:NessiScreen", "c:\webprojects\bfa\newnessi\NessiScreenSchema1.xsd"
!!!!!!!!!!!!!!!!!!!!!!
Exception (Error):
-2147467259
Incorrect definition for the root element in schema.
!!!!!!!!!!!!!!!!!!!!!!
Set oXML.schemas = oSchema
oXML.Validate
Else
MsgBox "Fail!" & vbCrLf & oXML.parseError.reason
End If
Stop
End Sub
Schema Example:
<?xml version="1.0" encoding="UTF-8"?>
<!--W3C Schema generated by XML Spy v3.5 NT (http://www.xmlspy.com)-->
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" elementFormDefault="qualified">
<xsd:element name="changed" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object was changed [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="checkedvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object checked value for radio button display [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="datatype">
<xsd:annotation>
<xsd:documentation>Object datatype [byte enum]</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:byte">
<xsd:enumeration value="1"/>
<xsd:enumeration value="2"/>
<xsd:enumeration value="3"/>
<xsd:enumeration value="4"/>
<xsd:enumeration value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="defaultvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object default value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="displaysequence" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Object display order [integer]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="displaysize" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Object screen display size [integer]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="field">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="mandatory"/>
<xsd:element ref="datatype"/>
<xsd:element ref="size"/>
<xsd:element ref="visible"/>
<xsd:element ref="lookupid"/>
<xsd:element ref="mode"/>
<xsd:element ref="indexed"/>
<xsd:element ref="fieldname"/>
<xsd:element ref="fielddesc"/>
<xsd:element ref="validate"/>
<xsd:element ref="mask"/>
<xsd:element ref="originalvalue"/>
<xsd:element ref="defaultvalue"/>
<xsd:element ref="newvalue"/>
<xsd:element ref="previousvalue"/>
<xsd:element ref="minvalue"/>
<xsd:element ref="maxvalue"/>
<xsd:element ref="displaysequence"/>
<xsd:element ref="validationscript"/>
<xsd:element ref="displaysize"/>
<xsd:element ref="validchars"/>
<xsd:element ref="checkedvalue"/>
<xsd:element ref="uncheckedvalue"/>
<xsd:element ref="changed"/>
<xsd:element ref="summaryscreen"/>
<xsd:element ref="x1"/>
<xsd:element ref="x2"/>
<xsd:element ref="y1"/>
<xsd:element ref="y2"/>
</xsd:sequence>
<xsd:attribute name="code" type="xsd:integer" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="fielddesc" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Field display description [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="fieldname" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Field internal reference [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="fields">
<xsd:annotation>
<xsd:documentation>Collection of fields for the selected screen</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="field" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="http_reference" type="xsd:string">
<xsd:annotation>
<xsd:documentation>URL of relevant object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="indexed" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object key [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="lookupid" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object lookup list id [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="mandatory" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object required [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="mask" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object display mask [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="maxvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object maximum value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="minvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object minimum value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="mode">
<xsd:annotation>
<xsd:documentation>Edit mode of the object [byte enum]</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:byte">
<xsd:enumeration value="0"/>
<xsd:enumeration value="1"/>
<xsd:enumeration value="2"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="newvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object new value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="originalvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object original value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="x1" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Left coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="x2" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Left + Width coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="y1" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Top coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="y2" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Top + Height coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="previousvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object previous value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="processid" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Workflow process that the screen must follow</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="screen">
<xsd:annotation>
<xsd:documentation>Root of data screen</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="screenname"/>
<xsd:element ref="screendesc"/>
<xsd:element ref="processid"/>
<xsd:element ref="workitemtypeid"/>
<xsd:element ref="mode"/>
<xsd:element ref="fields"/>
<xsd:element ref="screenpic"/>
</xsd:sequence>
<xsd:attribute name="code" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="screendesc" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Screen display description</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="screenname" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Internal screen reference</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="screenpic">
<xsd:annotation>
<xsd:documentation>Screen picture structure</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="x1"/>
<xsd:element ref="x2"/>
<xsd:element ref="y1"/>
<xsd:element ref="y2"/>
<xsd:element ref="http_reference"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="size" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>object data length [integer]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="summaryscreen" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object is part of summary screen [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="uncheckedvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object unchecked value for radio button display [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="validate" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object Validation required [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="validationscript" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object custom validation script [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="validchars" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object valid characters allowed [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="visible" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object visible [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="workitemtypeid" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>WorkItemType that the screen data maps to</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:schema>
-
Re: Validating XML
I get that error all the time... it may have something do do with how you
set the xmlns attribute in your instance document, person.xml. I ended up
setting xmlns in the instance document to a string such as "urn:myname" or
"schema.xsd", and then setting something like xmlns:t to the same value in
the schema document, where t is the prefix for the default namespace. I
hope that helps.
Eric Nichols
"Jaco de Villiers" <jacodv_32@hotmail.com> wrote:
>
>Am trying to validate a XML document against a schema. The document validates
>100% if I use XML Spy. However if I use the MSXML2.DOMDocument40 and MSXML2.XMLSchemaCache40
>objects the following happens.
>
>PLease help I can't find anything on the microsoft sites...
>
>VB Code Example:
>Private Sub Command1_Click()
> Dim oXML As New MSXML2.DOMDocument40
> Dim oSchema As New MSXML2.XMLSchemaCache40
>
> oXML.async = False
> oXML.validateOnParse = True
>
> If oXML.Load("c:\person.xml") Then
>
> oSchema.Add "uri:NessiScreen", "c:\webprojects\bfa\newnessi\NessiScreenSchema1.xsd"
>
>!!!!!!!!!!!!!!!!!!!!!!
>Exception (Error):
>-2147467259
>Incorrect definition for the root element in schema.
>!!!!!!!!!!!!!!!!!!!!!!
>
> Set oXML.schemas = oSchema
>
> oXML.Validate
>
> Else
> MsgBox "Fail!" & vbCrLf & oXML.parseError.reason
> End If
> Stop
>
>End Sub
>
>Schema Example:
><?xml version="1.0" encoding="UTF-8"?>
><!--W3C Schema generated by XML Spy v3.5 NT (http://www.xmlspy.com)-->
><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" elementFormDefault="qualified">
> <xsd:element name="changed" type="xsd:boolean">
> <xsd:annotation>
> <xsd:documentation>Object was changed [boolean]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="checkedvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object checked value for radio button display [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="datatype">
> <xsd:annotation>
> <xsd:documentation>Object datatype [byte enum]</xsd:documentation>
> </xsd:annotation>
> <xsd:simpleType>
> <xsd:restriction base="xsd:byte">
> <xsd:enumeration value="1"/>
> <xsd:enumeration value="2"/>
> <xsd:enumeration value="3"/>
> <xsd:enumeration value="4"/>
> <xsd:enumeration value="5"/>
> </xsd:restriction>
> </xsd:simpleType>
> </xsd:element>
> <xsd:element name="defaultvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object default value [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="displaysequence" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>Object display order [integer]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="displaysize" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>Object screen display size [integer]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="field">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="mandatory"/>
> <xsd:element ref="datatype"/>
> <xsd:element ref="size"/>
> <xsd:element ref="visible"/>
> <xsd:element ref="lookupid"/>
> <xsd:element ref="mode"/>
> <xsd:element ref="indexed"/>
> <xsd:element ref="fieldname"/>
> <xsd:element ref="fielddesc"/>
> <xsd:element ref="validate"/>
> <xsd:element ref="mask"/>
> <xsd:element ref="originalvalue"/>
> <xsd:element ref="defaultvalue"/>
> <xsd:element ref="newvalue"/>
> <xsd:element ref="previousvalue"/>
> <xsd:element ref="minvalue"/>
> <xsd:element ref="maxvalue"/>
> <xsd:element ref="displaysequence"/>
> <xsd:element ref="validationscript"/>
> <xsd:element ref="displaysize"/>
> <xsd:element ref="validchars"/>
> <xsd:element ref="checkedvalue"/>
> <xsd:element ref="uncheckedvalue"/>
> <xsd:element ref="changed"/>
> <xsd:element ref="summaryscreen"/>
> <xsd:element ref="x1"/>
> <xsd:element ref="x2"/>
> <xsd:element ref="y1"/>
> <xsd:element ref="y2"/>
> </xsd:sequence>
> <xsd:attribute name="code" type="xsd:integer" use="required"/>
> </xsd:complexType>
> </xsd:element>
> <xsd:element name="fielddesc" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Field display description [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="fieldname" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Field internal reference [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="fields">
> <xsd:annotation>
> <xsd:documentation>Collection of fields for the selected screen</xsd:documentation>
> </xsd:annotation>
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="field" maxOccurs="unbounded"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> <xsd:element name="http_reference" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>URL of relevant object</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="indexed" type="xsd:boolean">
> <xsd:annotation>
> <xsd:documentation>Object key [boolean]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="lookupid" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object lookup list id [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="mandatory" type="xsd:boolean">
> <xsd:annotation>
> <xsd:documentation>Object required [boolean]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="mask" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object display mask [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="maxvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object maximum value [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="minvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object minimum value [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="mode">
> <xsd:annotation>
> <xsd:documentation>Edit mode of the object [byte enum]</xsd:documentation>
> </xsd:annotation>
> <xsd:simpleType>
> <xsd:restriction base="xsd:byte">
> <xsd:enumeration value="0"/>
> <xsd:enumeration value="1"/>
> <xsd:enumeration value="2"/>
> </xsd:restriction>
> </xsd:simpleType>
> </xsd:element>
> <xsd:element name="newvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object new value [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="originalvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object original value [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="x1" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>Left coord of object</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="x2" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>Left + Width coord of object</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="y1" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>Top coord of object</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="y2" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>Top + Height coord of object</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="previousvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object previous value [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="processid" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>Workflow process that the screen must follow</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="screen">
> <xsd:annotation>
> <xsd:documentation>Root of data screen</xsd:documentation>
> </xsd:annotation>
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="screenname"/>
> <xsd:element ref="screendesc"/>
> <xsd:element ref="processid"/>
> <xsd:element ref="workitemtypeid"/>
> <xsd:element ref="mode"/>
> <xsd:element ref="fields"/>
> <xsd:element ref="screenpic"/>
> </xsd:sequence>
> <xsd:attribute name="code" type="xsd:string" use="required"/>
> </xsd:complexType>
> </xsd:element>
> <xsd:element name="screendesc" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Screen display description</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="screenname" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Internal screen reference</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="screenpic">
> <xsd:annotation>
> <xsd:documentation>Screen picture structure</xsd:documentation>
> </xsd:annotation>
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="x1"/>
> <xsd:element ref="x2"/>
> <xsd:element ref="y1"/>
> <xsd:element ref="y2"/>
> <xsd:element ref="http_reference"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> <xsd:element name="size" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>object data length [integer]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="summaryscreen" type="xsd:boolean">
> <xsd:annotation>
> <xsd:documentation>Object is part of summary screen [boolean]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="uncheckedvalue" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object unchecked value for radio button display [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="validate" type="xsd:boolean">
> <xsd:annotation>
> <xsd:documentation>Object Validation required [boolean]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="validationscript" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object custom validation script [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="validchars" type="xsd:string">
> <xsd:annotation>
> <xsd:documentation>Object valid characters allowed [string]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="visible" type="xsd:boolean">
> <xsd:annotation>
> <xsd:documentation>Object visible [boolean]</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
> <xsd:element name="workitemtypeid" type="xsd:integer">
> <xsd:annotation>
> <xsd:documentation>WorkItemType that the screen data maps to</xsd:documentation>
> </xsd:annotation>
> </xsd:element>
></xsd:schema>
>
>
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Development Centers
-- Android Development Center
-- Cloud Development Project Center
-- HTML5 Development Center
-- Windows Mobile Development Center
|