首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XMLSCHEMA中创建父节点

在XMLSCHEMA中创建父节点
EN

Stack Overflow用户
提问于 2017-07-25 19:16:09
回答 1查看 29关注 0票数 2

有对象:

代码语言:javascript
复制
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架构:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<document>
  <LIST>1</LIST>
  <LIST>2</LIST>
  <OBJ1>1</OBJ1>
  <OBJ2>2</OBJ2>
</document>

列表与OBJ1、OBJ2处于同一级别。有没有办法将XMLSCHEMA改为创建父节点,将列表改为创建xml,如下所示:

代码语言:javascript
复制
<document>
  <LIST>
    <value>1</value>
    <value>2</value>
  </LIST>
  <OBJ1>1</OBJ1>
  <OBJ2>2</OBJ2>
</document>
EN

回答 1

Stack Overflow用户

发布于 2017-11-17 23:59:43

创建一个名为LISTType的新complexType

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45301661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档