使用PL/SQL从XML文件获取XML方案

使用PL/SQL从XML文件获取XML方案,xml,oracle,Xml,Oracle,我有一个pl/sql过程,它解析xml文件并将其导入到不同的表中。但是这种xml来自外部系统,所以很难理解,当他们改变方案时。我需要从新文件中获取XML模式,并将其与以前使用PL/SQL导入的模式进行比较。您只需使用dbms\u xmlschema.registerSchema在数据库中注册外部XML模式,然后使用XmlType.isSchemaValid通过此模式检查外部XML- SQL> begin 2 dbms_xmlschema.registerSchema('test'

我有一个pl/sql过程,它解析xml文件并将其导入到不同的表中。但是这种xml来自外部系统,所以很难理解,当他们改变方案时。我需要从新文件中获取XML模式,并将其与以前使用PL/SQL导入的模式进行比较。

您只需使用dbms\u xmlschema.registerSchema在数据库中注册外部XML模式,然后使用
XmlType.isSchemaValid
通过此模式检查外部XML-

SQL> begin
  2    dbms_xmlschema.registerSchema('test',
  3  '<?xml version="1.0" encoding="UTF-8"?>
  4  <xs:schema xmlns="test"
  5             xmlns:xs="http://www.w3.org/2001/XMLSchema"
  6             elementFormDefault="qualified"
  7             attributeFormDefault="unqualified">
  8      <xs:element name="root">
  9          <xs:complexType>
 10              <xs:sequence>
 11                  <xs:element name="name"/>
 12                  <xs:element name="lastName"/>
 13              </xs:sequence>
 14          </xs:complexType>
 15      </xs:element>
 16  </xs:schema>');
 17  end;
 18  /

PL/SQL procedure successfully completed.

SQL> declare
  2    xml XmlType := XmlType('<root><name>John</name><lastName>Johanson</lastName></root>');
  3    xml2 XmlType := XmlType('<root><name>John</name></root>');
  4  begin
  5    if xml.isSchemaValid('test') = 1 then
  6      dbms_output.put_line('xml valid');
  7    else
  8      dbms_output.put_line('xml not valid');
  9    end if;
 10    if xml2.isSchemaValid('test') = 1 then
 11      dbms_output.put_line('xml2 valid');
 12    else
 13      dbms_output.put_line('xml2 not valid');
 14    end if;
 15  end;
 16  /
xml valid
xml2 not valid

PL/SQL procedure successfully completed.
SQL>begin
2 dbms_xmlschema.registerSchema('测试',
3  '
4.
8.
9
10
11
12
13
14
15
16  ');
17结束;
18  /
PL/SQL过程已成功完成。
SQL>声明
2 xml XmlType:=XmlType('JohnJohanson');
3 xml2 XmlType:=XmlType('John');
4开始
5如果xml.isSchemaValid('test')=1,则
6 dbms_output.put_行('xml valid');
7其他
8 dbms_output.put_行('xml无效');
9如果结束,则结束;
10如果xml2.isSchemaValid('test')=1,则
11 dbms_output.put_行('xml2 valid');
12其他
13 dbms_output.put_行('xml2无效');
14如果结束,则结束;
15结束;
16  /
xml有效
xml2无效
PL/SQL过程已成功完成。

主要问题是他们不共享方案,只共享文件,所以我需要从文件中获取此方案。但它是有用的信息=)您可以手动生成XSD一次(或使用在线资源,如),然后将其注册到数据库中,并使用方法isSchemaValid检查文件。