powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML-парсинг раз и навсегда
4 сообщений из 4, страница 1 из 1
XML-парсинг раз и навсегда
    #39529440
Rmagistr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите спарсить...
так робит

Код: 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.
Set SERVEROUTPUT ON;
declare
  l_clob  clob :=
    '<?xml version="1.0" encoding="utf-8"?>
<RS>
	<R>
		<C0>7005830005669684</C0>
		<C1>ИМЯ Илья Имявич;</C1>
		<C2></C2>
		<C3>32453245345</C3>
		<C4></C4>
		<C5>83455</C5>
		<C6>Литры</C6>
		<C7>323454338.5</C7>
		<C8>253459.25</C8>
		<C9>2934579.25</C9>
		<C10>345345345345</C10>
		<C11>54675675</C11>
		<C12>СБЕРБАНК</C12>
		<C13>657567656</C13>
	</R>
</RS>';
  l_str varchar2(32000);
begin
  for c in (select column_value as x from table(XMLSequence(XMLType(l_clob).extract('/RS/R/C3')))) 
  loop
    l_str :=  c.x.extract('/C3/text()').getStringVal();
  end loop;
  l_str := ltrim(l_str, ',');
  dbms_output.put_line (l_str);
end;
/



а так не робит

Код: 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.
48.
49.
50.
51.
52.
Set SERVEROUTPUT ON;
declare
  l_clob  clob :=
    '<?xml version="1.0" encoding="utf-8"?>
<RS xmlns="urn:schemas-microsoft-com:xml-analysis:rowset">
	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:saw-sql="urn:saw-sql" targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset">
		<xsd:complexType name="R">
			<xsd:sequence>
				<xsd:element name="C0" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CARD"."S_NUMBER"" saw-sql:displayFormula=""Карта"."Номер карты"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Карта" saw-sql:columnHeading="Номер карты" saw-sql:isDoubleColumn="false" saw-sql:columnID="c2f240a89abba2cad"/>
				<xsd:element name="C1" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CARD"."S_DRIVERS"" saw-sql:displayFormula=""Карта"."Список водителей"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Карта" saw-sql:columnHeading="Водитель" saw-sql:isDoubleColumn="false" saw-sql:columnID="ce35dbe70b2dca03a"/>
				<xsd:element name="C2" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CARD"."S_VEHICLES"" saw-sql:displayFormula=""Карта"."Список ТС"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Карта" saw-sql:columnHeading="ТС" saw-sql:isDoubleColumn="false" saw-sql:columnID="cdaf197d73de8391a"/>
				<xsd:element name="C3" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CARD"."S_COMMENT"" saw-sql:displayFormula=""Карта"."Комментарий"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Карта" saw-sql:columnHeading="Комментарий клиента" saw-sql:isDoubleColumn="false" saw-sql:columnID="cf62e63b9618c8aff"/>
				<xsd:element name="C4" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CARD"."S_GROUP_NAME"" saw-sql:displayFormula=""Карта"."Группа карт"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Карта" saw-sql:columnHeading="Группа карт" saw-sql:isDoubleColumn="false" saw-sql:columnID="c5879886a4e4efc46"/>
				<xsd:element name="C5" type="xsd:double" minOccurs="0" maxOccurs="1" saw-sql:type="double" saw-sql:sqlFormula=""01_TRANSACTION"."F_TRANSACTION"."N_QTY"" saw-sql:displayFormula=""Показатели"."Количество"" saw-sql:aggregationRule="sum" saw-sql:aggregationType="agg" saw-sql:tableHeading="Показатели" saw-sql:columnHeading="Количество" saw-sql:isDoubleColumn="false" saw-sql:columnID="c49a6951a5cf8c980"/>
				<xsd:element name="C6" type="xsd:string" minOccurs="1" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_PRODUCT"."S_UNITS"" saw-sql:displayFormula=""Продукт"."ЕИ"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Продукт" saw-sql:columnHeading="Единица измерения" saw-sql:isDoubleColumn="false" saw-sql:columnID="c16b40fd58302fb00"/>
				<xsd:element name="C7" type="xsd:double" minOccurs="0" maxOccurs="1" saw-sql:type="double" saw-sql:sqlFormula=""01_TRANSACTION"."F_TRANSACTION"."F_SUM_WO_DISCOUNT"" saw-sql:displayFormula=""Показатели"."Сумма покупки без скидки"" saw-sql:aggregationRule="sum" saw-sql:aggregationType="agg" saw-sql:tableHeading="Показатели" saw-sql:columnHeading="Сумма без скидки" saw-sql:isDoubleColumn="false" saw-sql:columnID="ca1e05d19850b8feb"/>
				<xsd:element name="C8" type="xsd:double" minOccurs="0" maxOccurs="1" saw-sql:type="double" saw-sql:sqlFormula="ifnull("01_TRANSACTION"."F_TRANSACTION"."F_DISCOUNT",0)" saw-sql:displayFormula=" IFNULL("Показатели"."Скидка", 0)" saw-sql:aggregationRule="complex" saw-sql:aggregationType="agg" saw-sql:tableHeading="Показатели" saw-sql:columnHeading="Сумма скидки" saw-sql:isDoubleColumn="false" saw-sql:columnID="ca2c45a2fae1f92c1"/>
				<xsd:element name="C9" type="xsd:double" minOccurs="0" maxOccurs="1" saw-sql:type="double" saw-sql:sqlFormula=""01_TRANSACTION"."F_TRANSACTION"."F_SUM"" saw-sql:displayFormula=""Показатели"."Сумма покупки"" saw-sql:aggregationRule="sum" saw-sql:aggregationType="agg" saw-sql:tableHeading="Показатели" saw-sql:columnHeading="Сумма к оплате" saw-sql:isDoubleColumn="false" saw-sql:columnID="c20740d6d8db13efe"/>
				<xsd:element name="C10" type="xsd:double" minOccurs="0" maxOccurs="1" saw-sql:type="double" saw-sql:sqlFormula=""01_TRANSACTION"."F_TRANSACTION"."F_%_DISCOUNT"" saw-sql:displayFormula=""Показатели"."% скидки"" saw-sql:aggregationRule="complex" saw-sql:aggregationType="agg" saw-sql:tableHeading="Показатели" saw-sql:columnHeading="% скидки" saw-sql:isDoubleColumn="false" saw-sql:columnID="c7d9c7cc8e3dc8618"/>
				<xsd:element name="C11" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_AGREEMENT"."S_AGREEMENT_NUM"" saw-sql:displayFormula=""Договор"."Номер договора"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Договор" saw-sql:columnHeading="Номер договора" saw-sql:isDoubleColumn="false" saw-sql:columnID="cd0b531d57ab026e9"/>
				<xsd:element name="C12" type="xsd:string" minOccurs="1" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CLIENT"."S_SHORT_NAME"" saw-sql:displayFormula=""Клиент"."Краткое наименование клиента"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Клиент" saw-sql:columnHeading="Наименование клиента" saw-sql:isDoubleColumn="false" saw-sql:columnID="c69357768769b50ac"/>
				<xsd:element name="C13" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CLIENT"."S_INN"" saw-sql:displayFormula=""Клиент"."ИНН"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Клиент" saw-sql:columnHeading="ИНН" saw-sql:isDoubleColumn="false" saw-sql:columnID="cb0894ca4d6e6faaa"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:schema>
	<R>
		<C0>7005830005669684</C0>
		<C1>ИМЯ Илья Имявич;</C1>
		<C2></C2>
		<C3>32453245345</C3>
		<C4></C4>
		<C5>83455</C5>
		<C6>Литры</C6>
		<C7>323454338.5</C7>
		<C8>253459.25</C8>
		<C9>2934579.25</C9>
		<C10>345345345345</C10>
		<C11>54675675</C11>
		<C12>СБЕРБАНК</C12>
		<C13>657567656</C13>
	</R>
</RS>';
  l_str varchar2(32000);
begin
  for c in (select column_value as x from table(XMLSequence(XMLType(l_clob).extract('/RS/R/C3')))) 
  loop
    l_str :=  c.x.extract('/C3/text()').getStringVal();
  end loop;
  l_str := ltrim(l_str, ',');
  dbms_output.put_line (l_str);
end;
/
...
Рейтинг: 0 / 0
XML-парсинг раз и навсегда
    #39529456
еnv..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rmagistr,

Код: 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.
select xmltype('<?xml version="1.0" encoding="utf-8"?>
<RS xmlns="urn:schemas-microsoft-com:xml-analysis:rowset">
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:saw-sql="urn:saw-sql" targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset">
        <xsd:complexType name="R">
            <xsd:sequence>
                <xsd:element name="C0" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula=""01_TRANSACTION"."D_CARD"."S_NUMBER"" saw-sql:displayFormula=""Карта"."Номер карты"" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Карта" saw-sql:columnHeading="Номер карты" saw-sql:isDoubleColumn="false" saw-sql:columnID="c2f240a89abba2cad"/>                
            </xsd:sequence>
        </xsd:complexType>
    </xsd:schema>
    <R>
        <C0>7005830005669684</C0>
        <C1>ИМЯ Илья Имявич;</C1>
        <C2/>
        <C3>32453245345</C3>
        <C4/>
        <C5>83455</C5>
        <C6>Литры</C6>
        <C7>323454338.5</C7>
        <C8>253459.25</C8>
        <C9>2934579.25</C9>
        <C10>345345345345</C10>
        <C11>54675675</C11>
        <C12>СБЕРБАНК</C12>
        <C13>657567656</C13>
    </R>
</RS>') from dual;
...
Рейтинг: 0 / 0
XML-парсинг раз и навсегда
    #39529581
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еnv..,

Что бы ты ни было, но ситуацию особо не прояснило.

Код: xml
1.
saw-sql:sqlFormula=""01_TRANSACTION"."D_CARD"."S_NUMBER"" saw-sql:displayFormula=""Карта"."Номер карты""


Не взлетит.
XML не CSV, экранирование кавычек кавычками не поддерживает. Можете проверить валидатором .

Либо при формировании превращайте внутренние двойные кавычки в & quot; (без пробела), либо удаляйте эту недосхему из файла.
Код: 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.
set define off
select xmltype.createXML('<?xml version="1.0" encoding="utf-8"?>
<RS xmlns="urn:schemas-microsoft-com:xml-analysis:rowset">
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:saw-sql="urn:saw-sql" targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset">
        <xsd:complexType name="R">
            <xsd:sequence>
                <xsd:element name="C0" type="xsd:string" minOccurs="0" maxOccurs="1" saw-sql:type="varchar" saw-sql:sqlFormula="&quot;01_TRANSACTION&quot;.&quot;D_CARD&quot;.&quot;S_NUMBER&quot;" saw-sql:displayFormula="&quot;Карта&quot;.&quot;Номер карты&quot;" saw-sql:aggregationRule="none" saw-sql:aggregationType="nonAgg" saw-sql:tableHeading="Карта" saw-sql:columnHeading="Номер карты" saw-sql:isDoubleColumn="false" saw-sql:columnID="c2f240a89abba2cad"/>                
            </xsd:sequence>
        </xsd:complexType>
    </xsd:schema>
    <R>
        <C0>7005830005669684</C0>
        <C1>ИМЯ Илья Имявич;</C1>
        <C2/>
        <C3>32453245345</C3>
        <C4/>
        <C5>83455</C5>
        <C6>Литры</C6>
        <C7>323454338.5</C7>
        <C8>253459.25</C8>
        <C9>2934579.25</C9>
        <C10>345345345345</C10>
        <C11>54675675</C11>
        <C12>СБЕРБАНК</C12>
        <C13>657567656</C13>
    </R>
</RS>') from dual;
...
Рейтинг: 0 / 0
XML-парсинг раз и навсегда
    #39529982
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Namespace тоже надо учитывать.

Код: 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.
Set SERVEROUTPUT ON;
declare
  l_clob  clob :=
    '<?xml version="1.0" encoding="utf-8"?>
<RS xmlns="urn:schemas-microsoft-com:xml-analysis:rowset">
	<R>
		<C0>7005830005669684</C0>
		<C1>ИМЯ Илья Имявич;</C1>
		<C2></C2>
		<C3>32453245345</C3>
		<C4></C4>
		<C5>83455</C5>
		<C6>Литры</C6>
		<C7>323454338.5</C7>
		<C8>253459.25</C8>
		<C9>2934579.25</C9>
		<C10>345345345345</C10>
		<C11>54675675</C11>
		<C12>СБЕРБАНК</C12>
		<C13>657567656</C13>
	</R>
</RS>';
  l_str varchar2(32000);
begin
  for c in (select column_value as x from table(XMLSequence(XMLType(l_clob).extract('/RS/R/C3', 'xmlns="urn:schemas-microsoft-com:xml-analysis:rowset"')))) 
  loop
    l_str :=  c.x.extract('/C3/text()', 'xmlns="urn:schemas-microsoft-com:xml-analysis:rowset"').getStringVal();
  end loop;
  l_str := ltrim(l_str, ',');
  dbms_output.put_line (l_str);
end;
/
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML-парсинг раз и навсегда
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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