powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг xml по заданной xsd-схеме
4 сообщений из 4, страница 1 из 1
Парсинг xml по заданной xsd-схеме
    #39508777
Idoh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. В теме парсинга я не очень, здесь нашел пример как распарсить xml-файл:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
--создаем таблицу
create table tmp_xml (xml XMLType);

--заполняем таблицу
insert into tmp_xml (xml) values (XMLType(
'<RESPONSE>
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_002">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="PASSP_NO" value="AAA012345678" />
      <ATTRIBUTE name="ISSUE_DATE" value="01.01.2000" />
    </ENTITY>
  </DATA>
</RESPONSE>'
));

--парсим даныне из таблицы
select p.id
     , max(p.person_surname) person_surname
     , max(p.passport_no) passport_no
     , max(p.passport_issue_date) passport_issue_date
from (select d.extract('//ENTITY//ATTRIBUTE[@name="PERS_ID"]/@value').getStringVal() id
           , d.extract('//ENTITY//ATTRIBUTE[@name="SURNAME"]/@value').getStringVal() person_surname
           , d.extract('//ENTITY//ATTRIBUTE[@name="PASSP_NO"]/@value').getStringVal() passport_no
           , d.extract('//ENTITY//ATTRIBUTE[@name="ISSUE_DATE"]/@value').getStringVal() passport_issue_date
      from tmp_xml t
         , table(XMLSequence(t.xml.extract('RESPONSE/DATA/ENTITY'))) d
     ) p
group by p.id;



А как сделать чтобы парсинг происходил по заданной xsd-схеме?
Первым делом я так понимаю надо схему зарегестрировать. Делаю так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
declare 
  xsdclob clob := '<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://localhost" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="RESPONSE">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="DATA">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ENTITY" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ATTRIBUTE" maxOccurs="unbounded" minOccurs="0">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute type="xs:string" name="name" use="optional"/>
                            <xs:attribute type="xs:string" name="value" use="optional"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute type="xs:string" name="name" use="optional"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:byte" name="REQUEST_ID"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>';
begin
  begin
    dbms_xmlschema.deleteschema('myxsd.xsd', 3); 
  exception
    when others then
      null;
  end;
  begin
    dbms_xmlschema.registerSchema('myxsd.xsd', xsdclob, local => true, genTypes => false, genbean => false, genTables => false);
  exception
    when others then
      null;
  end;
end;


А как ее далее подключить к проверке xml при разборе?
...
Рейтинг: 0 / 0
Парсинг xml по заданной xsd-схеме
    #39508783
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IdohА как ее далее подключить к проверке xml при разборе?Для проверки соответствия хмеля XSD-схеме у XML-типа есть методы isSchemaValid и schemaValidate.
...
Рейтинг: 0 / 0
Парсинг xml по заданной xsd-схеме
    #39508785
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
genTypes => false

xmltype конструктор+xmltype toobject
...
Рейтинг: 0 / 0
Парсинг xml по заданной xsd-схеме
    #39508803
Idoh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал хранимую процедуру которая проверяет на валидность:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
create or replace procedure XML_FILE_VALIDATOR is

xml XMLType;

  xml_clob1 clob := '<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE xmlns="http://localhost"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://localhost myxsd1.xsd">
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
  </DATA>
</RESPONSE>';
begin
 xml := xmltype(xml_clob1);


    if xml.isschemavalid('myxsd1.xsd')  = 1 then
    dbms_output.put_line ('XML document is VALID');

  else
    dbms_output.put_line ('XML document is INVALID => '||sqlerrm);

  end if;
end;


А как вместо "clob" передать на проверку ранее созданную таблицу tmp_xml ?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг xml по заданной xsd-схеме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]