簡體   English   中英

在XMLSCHEMA中創建父節點

[英]Create parent node in 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>

清單與OBJ1,OBJ2處於同一級別。 有什么辦法可以將XMLSCHEMA創建父節點更改為LIST創建xml,例如:

<document>
  <LIST>
    <value>1</value>
    <value>2</value>
  </LIST>
  <OBJ1>1</OBJ1>
  <OBJ2>2</OBJ2>
</document>

創建一個名為LISTType的新complexType

<xsd:complexType name="LISTType" xdb:maintainDOM="false" xdb:SQLType="TYPE_NUMBERLIST" >
    <xsd:sequence>
        <xsd:element name="VALUE" type="xsd:double" maxOccurs="unbounded" minOccurs="0" xdb:SQLType="NUMBER"/>
    </xsd:sequence>
</xsd:complexType>
<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" xdb:SQLCollType="TYPE_NUMBERLIST" 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM