slicendice
Programmer
Hi
I have a bunch of XML files that need reading/processing and I've constructed something that uses xmltype, dbms_xmlschema, etc. I've loaded the associated XSD schema into the database using the following:
When processing the XML files, the following is used:
It all works fine as long as every field in the XML file has a value; if one of the fields has no value (which can legitimately sometimes happen), then the call to schemaValidate above produces the following error:
The XSD file contains the following definition for the field that contains a blank value:
...and the section in the XML file that contains the field with no value is:
Is there any way, either in the XSD or in the way the XML file is processed, to cleanly handle empty values? And by that I mean to somehow indicate that it's OK for a field to contain no value and therefore prevent an error being generated?
Thanks...
I have a bunch of XML files that need reading/processing and I've constructed something that uses xmltype, dbms_xmlschema, etc. I've loaded the associated XSD schema into the database using the following:
SQL:
-- Read the XSD file and load it into an xmltype
-- xtXSD is declared as xmltype
xtXSD := xmltype(dbms_xslprocessor.read2Clob(gccWIFDir, p_vcXSDFilename));
BEGIN
-- If a schema with this name already exists then get rid of it
-- i.e. this new schema will overwrite any existing schema
dbms_xmlschema.deleteSchema(gcvcSchemaURL,
dbms_xmlschema.delete_cascade_force);
EXCEPTION
WHEN schema_doesnt_exist THEN
NULL;
END;
dbms_xmlschema.registerSchema(schemaurl => gcvcSchemaURL,
schemadoc => xtXSD,
local => TRUE,
gentypes => FALSE,
genbean => FALSE,
gentables => FALSE);
When processing the XML files, the following is used:
SQL:
-- Read the XML file and load it into an xmltype
xtXML := xmltype(dbms_xslprocessor.read2Clob(gccWIFDir, p_vcFilename));
-- Check to make sure the XML contents conform to the schema
xtXML := xtXML.createSchemaBasedXML(gcvcSchemaURL);
xtXML.schemaValidate;
It all works fine as long as every field in the XML file has a value; if one of the fields has no value (which can legitimately sometimes happen), then the call to schemaValidate above produces the following error:
SQL:
ORA-31154: invalid XML document
ORA-19202: Error occurred in XML processing
LSX-00009: data missing for type "short"
ORA-06512: at "SYS.XMLTYPE", line 354
The XSD file contains the following definition for the field that contains a blank value:
XML:
<xs:element name="index_2">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="id"/>
<xs:element type="xs:short" name="value"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...and the section in the XML file that contains the field with no value is:
XML:
<index_2>
<id>ICIS_EVENT_ID</id>
<value />
</index_2>
Is there any way, either in the XSD or in the way the XML file is processed, to cleanly handle empty values? And by that I mean to somehow indicate that it's OK for a field to contain no value and therefore prevent an error being generated?
Thanks...