2
有对象:在XMLSCHEMA创建父节点
create or replace type test.type_numberlist as table of number;
/
create or replace type test.type_test as object (
LIST test.type_numberlist
, OBJ1 number
, OBJ2 number
)
/
创建简单的XML模式:
BEGIN DBMS_XMLSCHEMA.registerSchema(
SCHEMAURL => 'testschema.xsd',
SCHEMADOC => '<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xdb="http://xmlns.oracle.com/xdb"
xsi:schemaLocation="http://xmlns.oracle.com/xdb http://xmlns.oracle.com/xdb/XDBSchema.xsd">
<xsd:element name="document" type="TYPE_TESTType" xdb:SQLType="TYPE_TEST" xdb:SQLSchema="TEST"/>
<xsd:complexType name="TYPE_TESTType" xdb:SQLType="TYPE_TEST" xdb:SQLSchema="TEST" xdb:maintainDOM="false">
<xsd:sequence>
<xsd:element name="LIST" type="xsd:double" maxOccurs="unbounded" minOccurs="0" xdb:SQLName="LIST" xdb:SQLCollType="TYPE_NUMBERLIST" xdb:SQLType="NUMBER" xdb:SQLCollSchema="TEST"/>
<xsd:element name="OBJ1" type="xsd:double" xdb:SQLName="OBJ1" xdb:SQLType="NUMBER"/>
<xsd:element name="OBJ2" type="xsd:double" xdb:SQLName="OBJ2" xdb:SQLType="NUMBER"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>',
LOCAL => FALSE,
GENTYPES => FALSE,
OWNER => 'TEST');
END;
/
测试生成XML的对象:
declare
i test.type_test := new test.type_test(LIST => test.type_numberlist(1,2)
,OBJ1 => 1
,OBJ2 => 2);
v_xml xmltype;
begin
v_xml := xmltype(xmlData => i
, schema => 'TESTSCHEMA.xsd'
, element => 'document'
, validated => 1);
dbms_output.put_line(v_xml.getstringval());
end;
得到这个XML:
<document>
<LIST>1</LIST>
<LIST>2</LIST>
<OBJ1>1</OBJ1>
<OBJ2>2</OBJ2>
</document>
LIST与OBJ1,OBJ2处于同一级别。有没有什么办法改变XMLSCHEMA创建父节点列表来创建XML,如:
<document>
<LIST>
<value>1</value>
<value>2</value>
</LIST>
<OBJ1>1</OBJ1>
<OBJ2>2</OBJ2>
</document>