how to validate xml file against xsd file in vb6

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Sushant Panda

    how to validate xml file against xsd file in vb6

    I m trying to validating xml file against xsd file in vb6.0
    but i m getting an error

    xsd file:(Aces_Dlr. xsd)

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!--W3C Schema generated by XMLSpy v2010 (http://www.altova.com)-->
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    	   xmlns:n="urn:sample"
    	   targetNamespace="urn:sample">
    
    	<xs:attribute name="ToolVer">
    		<xs:simpleType>
    			<xs:restriction base="xs:decimal">
    				<xs:enumeration value="1.0"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:attribute>
    	<xs:simpleType name="ST_QUANTITY">
    		<xs:restriction base="xs:decimal">
    			<xs:maxInclusive value="999999999999.99"/>
    			<xs:pattern value="[0-9]{0,12}(.)[0-9]{0,2}"/>
    		</xs:restriction>
    	</xs:simpleType>
    	<xs:simpleType name="ST_AMOUNT-OF-DUTY-INVOLVED">
    		<xs:restriction base="xs:decimal">
    			<xs:maxInclusive value="9999999999999.00"/>
    			<xs:pattern value="[0-9]{0,13}(.)[0]{0,2}"/>
    		</xs:restriction>
    	</xs:simpleType>
    	<xs:attribute name="SL-NO">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:pattern value="[0-9]{1,4}"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:attribute>
    	<xs:attribute name="ReturnType">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:enumeration value="DLR"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:attribute>
    	<xs:element name="SELF-ASSESSMENT-MEMORANDAM">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="DATE"/>
    				<xs:element ref="PLACE"/>
    				<xs:element ref="REMARKS"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="RETURN-YEAR">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:length value="4"/>
    				<xs:pattern value="((19|20)\d\d)"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="RETURN">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="HEADER-DATA"/>
    				<xs:element ref="INVOICE-HEADER" minOccurs="0"/>
    				<xs:element ref="DOCUMENT-HEADER" minOccurs="0"/>
    				<xs:element ref="SELF-ASSESSMENT-MEMORANDAM"/>
    			</xs:sequence>
    			<xs:attribute ref="ToolVer" use="required"/>
    			<xs:attribute ref="ReturnType" use="required"/>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="REMARKS">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="1000"/>
    				<xs:minLength value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="REGISTRATION-NUMBER">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:pattern value="[A-Z]{5}[0-9]{4}[A-Z](XM|XD|EM|ED)[0-9]{3}"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="QUARTER">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:enumeration value="Jan-Mar"/>
    				<xs:enumeration value="Apr-Jun"/>
    				<xs:enumeration value="Jul-Sep"/>
    				<xs:enumeration value="Oct-Dec"/>
    				<xs:enumeration value="jan-mar"/>
    				<xs:enumeration value="apr-jun"/>
    				<xs:enumeration value="jul-sep"/>
    				<xs:enumeration value="oct-dec"/>
    				<xs:enumeration value="JAN-MAR"/>
    				<xs:enumeration value="APR-JUN"/>
    				<xs:enumeration value="JUL-SEP"/>
    				<xs:enumeration value="OCT-DEC"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="NIL-RETURN">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:enumeration value="Yes"/>
    				<xs:enumeration value="No"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="QUANTITY-CODE">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:enumeration value="1KKWH"/>
    				<xs:enumeration value="C/K"/>
    				<xs:enumeration value="CM"/>
    				<xs:enumeration value="CM3"/>
    				<xs:enumeration value="G"/>
    				<xs:enumeration value="GI F/S"/>
    				<xs:enumeration value="KG"/>
    				<xs:enumeration value="KL"/>
    				<xs:enumeration value="L"/>
    				<xs:enumeration value="M"/>
    				<xs:enumeration value="M2"/>
    				<xs:enumeration value="M3"/>
    				<xs:enumeration value="MM"/>
    				<xs:enumeration value="MT"/>
    				<xs:enumeration value="PA"/>
    				<xs:enumeration value="Q"/>
    				<xs:enumeration value="T"/>
    				<xs:enumeration value="TU"/>
    				<xs:enumeration value="U"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="QUANTITY">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="ST_QUANTITY"/>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="PLACE">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="50"/>
    				<xs:minLength value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="NAME">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="100"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="ISSUED-BY">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:enumeration value="Importer"/>
    				<xs:enumeration value="Manufacturer"/>
    				<xs:enumeration value="Dealer"/>
    				<xs:enumeration value="importer"/>
    				<xs:enumeration value="manufacturer"/>
    				<xs:enumeration value="dealer"/>
    				<xs:enumeration value="IMPORTER"/>
    				<xs:enumeration value="MANUFACTURER"/>
    				<xs:enumeration value="DEALER"/>
    				<xs:enumeration value="      Dealer"/>
    				<xs:enumeration value="     Importer"/>
    				<xs:enumeration value="   Manufacturer"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="INVOICE-PARTICULARS">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="INVOICE-NUMBER"/>
    				<xs:element ref="INVOICE-DATE"/>
    				<xs:element ref="INVOICE-ITEMS" maxOccurs="unbounded"/>
    			</xs:sequence>
    			<xs:attribute ref="SL-NO" use="required"/>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="INVOICE-NUMBER">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="20"/>
    				<xs:minLength value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="INVOICE-ITEMS">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="DESCRIPTION-OF-GOODS"/>
    				<xs:element ref="CETSH-NUMBER"/>
    				<xs:element ref="QUANTITY-CODE"/>
    				<xs:element ref="QUANTITY"/>
    				<xs:element name="AMOUNT-OF-DUTY-INVOLVED">
    					<xs:complexType>
    						<xs:simpleContent>
    							<xs:extension base="ST_AMOUNT-OF-DUTY-INVOLVED"/>
    						</xs:simpleContent>
    					</xs:complexType>
    				</xs:element>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="INVOICE-HEADER">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="INVOICE-PARTICULARS" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="INVOICE-DATE">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:pattern value="(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/]([0-9]{4})"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="INVOICE-BILL-ENTRY-NO">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="20"/>
    				<xs:minLength value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="HEADER-DATA">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="RETURN-YEAR"/>
    				<xs:element ref="QUARTER"/>
    				<xs:element ref="DEALER-NAME"/>
    				<xs:element ref="REGISTRATION-NUMBER"/>
    				<xs:element ref="NIL-RETURN" minOccurs="0"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="DOCUMENT-HEADER">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="DOCUMENT-DETAIL" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="DOCUMENT-DETAIL">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="INVOICE-BILL-ENTRY-NO"/>
    				<xs:element ref="DATE"/>
    				<xs:element ref="ISSUED-BY"/>
    				<xs:element ref="REGISTRATION-NUMBER"/>
    				<xs:element ref="NAME"/>
    				<xs:element ref="ADDRESS"/>
    				<xs:element ref="INVOICE-ITEMS" maxOccurs="unbounded"/>
    			</xs:sequence>
    			<xs:attribute ref="SL-NO" use="required"/>
    		</xs:complexType>
    	</xs:element>
    	<xs:element name="DESCRIPTION-OF-GOODS">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="255"/>
    				<xs:minLength value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="DEALER-NAME">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="255"/>
    				<xs:minLength value="1"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="DATE">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:pattern value="((0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/]([0-9]{4}))"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="CETSH-NUMBER">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:pattern value="([0-9]{8})"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="ADDRESS">
    		<xs:simpleType>
    			<xs:restriction base="xs:string">
    				<xs:maxLength value="200"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:element>
    	<xs:element name="ACES">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element ref="RETURN"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>
    ---------------------
    Xml file(Sample.xml )


    Code:
    <ACES><RETURN ReturnType="DLR" ToolVer="1.0"><HEADER-DATA><RETURN-YEAR>2010</RETURN-YEAR><QUARTER>Jul-Sep</QUARTER><DEALER-NAME>B.H.Enterprise</DEALER-NAME><REGISTRATION-NUMBER>ABCDE1234EXD123</REGISTRATION-NUMBER><NIL-RETURN>No</NIL-RETURN></HEADER-DATA><INVOICE-HEADER><INVOICE-PARTICULARS SL-NO="1"><INVOICE-NUMBER>001</INVOICE-NUMBER><INVOICE-DATE>01/07/2010</INVOICE-DATE><INVOICE-ITEMS><DESCRIPTION-OF-GOODS>T.G.UREA</DESCRIPTION-OF-GOODS><CETSH-NUMBER>01019010</CETSH-NUMBER><QUANTITY-CODE>KG</QUANTITY-CODE><QUANTITY>2350.00</QUANTITY><AMOUNT-OF-DUTY-INVOLVED>23500.00</AMOUNT-OF-DUTY-INVOLVED></INVOICE-ITEMS></INVOICE-PARTICULARS><INVOICE-PARTICULARS SL-NO="2"><INVOICE-NUMBER>002</INVOICE-NUMBER><INVOICE-DATE>02/07/2010</INVOICE-DATE><INVOICE-ITEMS><DESCRIPTION-OF-GOODS>T.G.UREA</DESCRIPTION-OF-GOODS><CETSH-NUMBER>01011090</CETSH-NUMBER><QUANTITY-CODE>KG</QUANTITY-CODE><QUANTITY>8210.00</QUANTITY><AMOUNT-OF-DUTY-INVOLVED>82100.00</AMOUNT-OF-DUTY-INVOLVED></INVOICE-ITEMS></INVOICE-PARTICULARS></INVOICE-HEADER><DOCUMENT-HEADER><DOCUMENT-DETAIL SL-NO="1"><INVOICE-BILL-ENTRY-NO>05259</INVOICE-BILL-ENTRY-NO><DATE>30/06/2010</DATE><ISSUED-BY>Dealer</ISSUED-BY><REGISTRATION-NUMBER>ABCDE1235EXD123</REGISTRATION-NUMBER><NAME>RCF</NAME><ADDRESS>zzzzzzzzzzzzzz</ADDRESS><INVOICE-ITEMS><DESCRIPTION-OF-GOODS>TG UREA</DESCRIPTION-OF-GOODS><CETSH-NUMBER>01019010</CETSH-NUMBER><QUANTITY-CODE>KG</QUANTITY-CODE><QUANTITY>1000.00</QUANTITY><AMOUNT-OF-DUTY-INVOLVED>100000.00</AMOUNT-OF-DUTY-INVOLVED></INVOICE-ITEMS></DOCUMENT-DETAIL><DOCUMENT-DETAIL SL-NO="2"><INVOICE-BILL-ENTRY-NO>059626</INVOICE-BILL-ENTRY-NO><DATE>30/06/2010</DATE><ISSUED-BY>Dealer</ISSUED-BY><REGISTRATION-NUMBER>ABCDE1236EXD123</REGISTRATION-NUMBER><NAME>LIVE PHARMA</NAME><ADDRESS>ABCDE1235EXD123</ADDRESS><INVOICE-ITEMS><DESCRIPTION-OF-GOODS>T.G.UREA</DESCRIPTION-OF-GOODS><CETSH-NUMBER>01019010</CETSH-NUMBER><QUANTITY-CODE>KG</QUANTITY-CODE><QUANTITY>5000.00</QUANTITY><AMOUNT-OF-DUTY-INVOLVED>500000.00</AMOUNT-OF-DUTY-INVOLVED></INVOICE-ITEMS></DOCUMENT-DETAIL></DOCUMENT-HEADER><SELF-ASSESSMENT-MEMORANDAM><DATE>30/09/2010</DATE><PLACE>MUMBAI</PLACE><REMARKS>xxxxxxxxxxxxxxxxxxxx</REMARKS></SELF-ASSESSMENT-MEMORANDAM></RETURN></ACES>
    '---------------------
    vb code in form load event

    Code:
    Private Sub Form_Load()
        Validate "C:\XmlTest\Sample.xml", "C:\XmlTest\Aces_Dlr.xsd"
    End Sub
    
     Private Function Validate(ByVal strXMLPath As String, _
                                  ByVal strXSDPath As String) As Boolean
    
            Dim objSchemas As MSXML2.XMLSchemaCache40
            Dim objXML As MSXML2.DOMDocument40
            Dim objXSD As MSXML2.DOMDocument40
            Dim strNamespace As String
           
            Dim objErr As MSXML2.IXMLDOMParseError
            ' load XSD as DOM to populate in Schema Cache
            Set objXSD = New MSXML2.DOMDocument40
            objXSD.async = False
            If Not objXSD.Load(strXSDPath) Then
                Err.Raise 1, "Validate", "Load XSD failed: " & objXSD.parseError.reason
            Else
            
                ' get namespace name from XSD targetNamespace attribute
                'strNamespace = "urn:sample"
                strNamespace = objXSD.documentElement.getAttribute("targetNamespace")
            End If
           
            ' populate schema cache
            Set objSchemas = New MSXML2.XMLSchemaCache40
            objSchemas.Add strNamespace, objXSD
           
            ' load XML file (without validation - that comes later)
            Set objXML = New MSXML2.DOMDocument40
            objXML.async = False
            objXML.validateOnParse = False
            objXML.resolveExternals = False
           
            ' load XML, without any validation
            If Not objXML.Load(strXMLPath) Then
                Err.Raise 1, "Validate", "Load XML failed: " & objXML.parseError.reason
            End If
           
            ' bind Schema Cache to DOM
            Set objXML.schemas = objSchemas
           
            ' does this XML measure up?
            Set objErr = objXML.Validate()
           
            ' any good?
            Validate = (objErr.errorCode = 0)
            If objErr.errorCode <> 0 Then
                MsgBox objErr.reason
                'Err.Raise 1, "Validate", objErr.reason
                Exit Function
            End If
    
        End Function


    Please help me, it's urgent

    thanx
    Last edited by Dormilich; Oct 26 '10, 02:15 PM. Reason: please use [CODE] [/CODE] tags when posting code
  • Dormilich
    Recognized Expert Expert
    • Aug 2008
    • 8694

    #2
    which error do you get?

    Comment

    • Sushant Panda

      #3
      Validating Xml file against Xsd file

      Run time error – ‘-2147467259(8000 4005)’:
      File : ///c:/XmlTest/Aces_Dlr.xsd#/schema[1]/element[position()=9 and @name = ‘QUANTITY]/complexType[1]/simpleContent[1]/extension[1]
      Undeclared XSD type : ‘ST_Quantity’.

      Comment

      • jkmyoung
        Recognized Expert Top Contributor
        • Mar 2006
        • 2057

        #4
        It really has to do with the
        xmlns:n="urn:sa mple"
        targetNamespace ="urn:sample "

        Is this the namespace you want to validate for? If so, everytime you refer to a type within the schema, you must put the prefix before it, eg:
        <xs:attribute ref="n:ToolVer" use="required"/> OR
        <xs:extension base="n:ST_QUANTITY"/>

        I would decide what you really want before making 20-30 minor changes to your schema.
        Last edited by jkmyoung; Oct 28 '10, 12:59 PM.

        Comment

        Working...