powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML в Oracle9i. Примеры разборки
25 сообщений из 239, страница 5 из 10
XML в Oracle9i. Примеры разборки
    #34796334
ALD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALD
Гость
имею
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  xml_str := XMLType('<EMPLOYEES>
                     <EMP>
                        <EMPNO>112</EMPNO> 
                        <EMPNAME>Joe</EMPNAME>
                        <SALARY>50000</SALARY>
                      </EMP>
                     <EMP>
                        <EMPNO>217</EMPNO>
                        <EMPNAME>Jane</EMPNAME> 
                        <SAL>
                             <SALARY>60000</SALARY>
                        </SAL>
                     </EMP>
                    </EMPLOYEES>');
как получить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  xml_str := XMLType('<EMPLOYEES>
                     <EMP>
                        <EMPNO>112</EMPNO> 
                        <EMPNAME>Joe</EMPNAME>
                      </EMP>
                     <EMP>
                        <EMPNO>217</EMPNO>
                        <EMPNAME>Jane</EMPNAME> 
                        <SAL/>
                     </EMP>
                    </EMPLOYEES>');
т.е. вообще убрать теги <SALARY></SALARY>???
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #34796556
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
SQL> with t as (
   2   select XMLType('<EMPLOYEES>
  3                       <EMP>
  4                          <EMPNO>112</EMPNO>
  5                          <EMPNAME>Joe</EMPNAME>
  6                          <SALARY>50000</SALARY>
  7                        </EMP>
  8                       <EMP>
  9                          <EMPNO>217</EMPNO>
 10                          <EMPNAME>Jane</EMPNAME>
 11                          <SAL>
 12                               <SALARY>60000</SALARY>
 13                          </SAL>
 14                       </EMP>
 15                      </EMPLOYEES>') x
  16   from dual)
  17   select z.x.extract('/') x,
  18   deletexml(x,'//SALARY').extract('/') y
  19   FROM t z
  20   /

X                              Y
------------------------------ ------------------------------
<EMPLOYEES>                    <EMPLOYEES>
  <EMP>                          <EMP>
    <EMPNO> 112 </EMPNO>             <EMPNO> 112 </EMPNO>
    <EMPNAME>Joe</EMPNAME>         <EMPNAME>Joe</EMPNAME>
    <SALARY> 50000 </SALARY>       </EMP>
  </EMP>                         <EMP>
  <EMP>                            <EMPNO> 217 </EMPNO>
    <EMPNO> 217 </EMPNO>             <EMPNAME>Jane</EMPNAME>
    <EMPNAME>Jane</EMPNAME>        <SAL/>
    <SAL>                        </EMP>
      <SALARY> 60000 </SALARY>   </EMPLOYEES>
    </SAL>
  </EMP>
</EMPLOYEES>

Best regards

Maxim
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #34796812
ALD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALD
Гость
Maxim Demenko[src oracle]SQL> with t as (
2 select XMLType('<EMPLOYEES>
3 <EMP>
4 <EMPNO>112</EMPNO>
5 <EMPNAME>Joe</EMPNAME>
6 <SALARY>50000</SALARY>
7 </EMP>
8 <EMP>
9 <EMPNO>217</EMPNO>
10 <EMPNAME>Jane</EMPNAME>
11 <SAL>
12 <SALARY>60000</SALARY>
13 </SAL>
14 </EMP>
15 </EMPLOYEES>') x
16 from dual)
17 select z.x.extract('/') x,
18 deletexml(x,'//SALARY').extract('/') y
19 FROM t z
20 /

ORA-00904: "DELETEXML": недопустимый идентификатор
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #34796936
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALDORA-00904: "DELETEXML": недопустимый идентификаторRTFM Oracle Database 10g Release 2 (10.2) New Features in Oracle XML DB (FAQ)
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #34797015
ALD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALD
Гость
Elic ALDORA-00904: "DELETEXML": недопустимый идентификаторRTFM Oracle Database 10g Release 2 (10.2) New Features in Oracle XML DB (FAQ)
хорошо, а как в 9ке тогда сделать deleteXML?
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #34797270
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALD
хорошо, а как в 9ке тогда сделать deleteXML?

Попробуйте xslt, должно работать, нет 9ки под руками - не могу проверить.

Код: plaintext
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.
SQL> WITH T AS (
   2   select xmltype('<?xml version="1.0"?>
  3  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  4          <xsl:template match="*">
  5             <xsl:if test="self::*[name() !=''SALARY'']">
  6                  <xsl:copy>
  7                          <xsl:apply-templates/>
  8                  </xsl:copy>
  9                  </xsl:if>
 10          </xsl:template>
 11  </xsl:stylesheet>') xsl,
  12   xmltype('<EMPLOYEES>
 13   <EMP>
 14      <EMPNO>112</EMPNO>
 15      <EMPNAME>Joe</EMPNAME>
 16      <SALARY>50000</SALARY>
 17    </EMP>
 18   <EMP>
 19      <EMPNO>217</EMPNO>
 20      <EMPNAME>Jane</EMPNAME>
 21      <SAL>
 22           <SALARY>60000</SALARY>
 23      </SAL>
 24   </EMP>
 25  </EMPLOYEES>') xml
  26   from dual)
  27   select
  28   x.xml.extract('/') x,
  29   xmltransform(xml,xsl).extract('/') y
  30   from t x
  31   /

X                              Y
------------------------------ ------------------------------
<EMPLOYEES>                    <EMPLOYEES>
  <EMP>                          <EMP>
    <EMPNO> 112 </EMPNO>             <EMPNO> 112 </EMPNO>
    <EMPNAME>Joe</EMPNAME>         <EMPNAME>Joe</EMPNAME>
    <SALARY> 50000 </SALARY>       </EMP>
  </EMP>                         <EMP>
  <EMP>                            <EMPNO> 217 </EMPNO>
    <EMPNO> 217 </EMPNO>             <EMPNAME>Jane</EMPNAME>
    <EMPNAME>Jane</EMPNAME>        <SAL/>
    <SAL>                        </EMP>
      <SALARY> 60000 </SALARY>   </EMPLOYEES>
    </SAL>
  </EMP>
</EMPLOYEES>
Best regards

Maxim
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #34901587
ALD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALD
Гость
как подняться на уровень выше??

назовем первичным xml это:
Код: plaintext
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.
<ROWSET>
           <ROW>
             <CL_ID> 117374317391 </CL_ID>
             <CL_REF> 117374317390 </CL_REF>
             <CL_Institution> 00040 </CL_Institution>
             <CL_Action_Type>ADD</CL_Action_Type>
             <CL_Object_Type>CLIENT</CL_Object_Type>
             <CL_ShortName>SC- 0004 </CL_ShortName>
             <CL_Number>000000I</CL_Number>
             <CL_First_Name>ATM SERVICE CARD</CL_First_Name>
             <CL_Last_Name> 0004 - 1 </CL_Last_Name>
             <CN_ID> 117374317396 </CN_ID>
             <CN_REF> 117374317392 </CN_REF>
             <CN_Institution> 00040 </CN_Institution>
             <CN_Acc_Number> 0004 -SC0001A</CN_Acc_Number>
             <CN_Acc_Scheme>DPER</CN_Acc_Scheme>
             <CN_Acc_Sub_Type> 000157 </CN_Acc_Sub_Type>
             <CN_Acc_Serv_Pack>PVCRB1</CN_Acc_Serv_Pack>
             <CN_Plastic_First>ATM SERVICE CARD</CN_Plastic_First>
             <CN_Plastic_Last> 0004 - 1 </CN_Plastic_Last>
             <C_Card>
               <ROWSET>
                 <ROW>
                   <C_ID> 117374317397 </C_ID>
                   <C_REF> 117374317387 </C_REF>
                   <C_Institution> 00040 </C_Institution>
                   <C_Date_Exp> 2007 - 11 - 04 </C_Date_Exp>
                 </ROW>
                 <ROW>
                   <C_ID> 117374317398 </C_ID>
                   <C_REF> 117374317388 </C_REF>
                   <C_Institution> 00040 </C_Institution>
                   <C_Date_Exp> 2007 - 11 - 05 </C_Date_Exp>
                 </ROW>
               </ROWSET>
             </C_Card>
           </ROW>
         </ROWSET>
далее шаблон для трансформа
Код: plaintext
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.
...      <ApplicationsList>
        <xsl:for-each select="/ROWSET/ROW">
        	<Application>
  				<ObjectType>ClientContract</ObjectType>
  				<ActionType>Add</ActionType>
  				<RegNumber>'||LPAD([COUNTERS].[SQ].GetNextCount('XML_ISS_APPL_NUM"7_contract_card"')||'</RegNumber>
  				<OrderDprt><xsl:value-of select="CL_Institution"/></OrderDprt>
  				...
  				<SubApplList>
  					<xsl:for-each select="C_Card/ROWSET/ROW">
  						<xsl:call-template name="7_contract_card"/>
  					</xsl:for-each>
  				</SubApplList>
            </Application>
        </xsl:for-each>
      </ApplicationsList>

	<xsl:template name="7_contract_card">
		<Application>
			<ObjectType>Contract</ObjectType>
			<ActionType>Add</ActionType>
			<RegNumber>'||LPAD([COUNTERS].[SQ].GetNextCount('XML_ISS_APPL_NUM', NULL),8,'0')||'</RegNumber>
			<OrderDprt><xsl:value-of select="???/CN_Institution"/></OrderDprt>
			<Data>
				<Contract>
					<PlasticInfo>
						<FirstName><xsl:value-of select="???/CN_Plastic_First"/></FirstName>
						<LastName><xsl:value-of select="???/CN_Plastic_Last"/></LastName>
						<CompanyName><xsl:value-of select="???/CN_Plastic_Company"/></CompanyName>
					</PlasticInfo>
				</Contract>
			</Data>
			<SubApplList>
				<xsl:call-template name="8_card"/>
			</SubApplList>
		</Application>
	</xsl:template>

т.е. в <xsl:template name="7_contract_card"> мне CN_Plastic_First и др. надо вытащить с уровня выше в первичном xml. что надо поставить вместо вопросиков???? уже и // и .. пробовали - не помогает.
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #34901641
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALDт.е. в <xsl:template name="7_contract_card"> мне CN_Plastic_First и др. надо вытащить с уровня выше в первичном xml. что надо поставить вместо вопросиков???? уже и // и .. пробовали - не помогает.
как вы думаете в контексте <xsl:for-each select="C_Card/ROWSET/ROW"> каким по счету родителем будет ROW содержащий CN_Plastic_First ?
Код: plaintext
<xsl:value-of select="../../../CN_Plastic_First"/>
если я правильно посчитал теги ;)
ЗЫ отдельный топик лениво было сделать ?
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35146781
XML_queries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с одной проблемой. Есть таблица:

Код: plaintext
1.
2.
3.
4.
5.
create table test_query_with_xml_field (
     id  number( 10 ) not null primary key
    ,result  char( 1 ) not null -- 'S' successful, 'U' unsuccessful
    ,details xmltype
);

и данные в ней:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
insert into test_query_with_xml_field values (
      1 
    ,'U'
    ,xmltype(
'<Details>
  <Events>
    <Event type="failure" code="111">No file found</Event>
    <Event type="failure" code="222">Access denied</Event>
  </Events>
  <AdditionalInfo>
    <Called>MYPACK.MYPROC</Called>
    <UserID>User777</UserID>
  </AdditionalInfo>
</Details>'
    )
);

Не могу понять, каким образом можно составить запрос, который бы вернул данные, где Result = 'U' в таком обьёме:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ID
Result
Called
UserID
EventCode
EventMessage

 1  | U | MYPACK.MYPROC | User777 |  111  | No file found
 1  | U | MYPACK.MYPROC | User777 |  222  | Access denied

Подскажите, пожалуйста, как это можно было бы сделать.

Можно вариант №2 (но лучше было бы первый):


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ID
Result
Called
UserID
EventInformation

 1  | U | MYPACK.MYPROC | User777 |  111  - No file found;  222  - Access denied


Спасибо!
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35146792
XML_queries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML_queriesи данные в ней:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
insert into test_query_with_xml_field values (
      1 
    ,'U'
    ,xmltype(
'<Details>
  <Events>
    <Event type="failure" code="111">No file found</Event>
    <Event type="failure" code="222">Access denied</Event>
  </Events>
  <AdditionalInfo>
    <Called>MYPACK.MYPROC</Called>
    <UserID>User777</UserID>
  </AdditionalInfo>
</Details>'
    )
);



Правильнее будет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
insert into test_query_with_xml_field values (
      1 
    ,'U'
    ,xmltype(
'<?xml version="1.0" encoding="utf-8" ?>
<Details>
  <Events>
    <Event type="failure" code="111">No file found</Event>
    <Event type="failure" code="222">Access denied</Event>
  </Events>
  <AdditionalInfo>
    <Called>MYPACK.MYPROC</Called>
    <UserID>User777</UserID>
  </AdditionalInfo>
</Details>'
    )
);

...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35146935
Zloxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select ID
   2         ,Result
   3         ,extractValue(t.details,'Details/AdditionalInfo/Called') Called
   4         ,extractValue(t.details,'Details/AdditionalInfo/UserID') UserID
   5         ,extractValue(value(d),'Event/@code') EventCode
   6         ,extractValue(value(d),'Event') EventMessage
   7   from test_query_with_xml_field t
   8        ,table(xmlSequence(Extract(t.details,'/Details/Events/Event '))) d
   9   where Result = 'U'
  10   ;
 
         ID RESULT CALLED           USERID     EVENTCODE   EVENTMESSAGE
----------- ------ ---------------- ---------- ----------- --------------
           1  U      MYPACK.MYPROC    User777     111          No file found
           1  U      MYPACK.MYPROC    User777     222          Access denied
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35147192
XML_queries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромнейшее спасибо!
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203228
AnastasiaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пож-та, как можно удалить все пустые теги?
т.е если после Transform получили
<ROW>
<TEG1>111</TEG1>
<TEG2></TEG2>
<TEG3>333</TEG3>
</ROW>
то надо удалить TEG2

Oracle 9ка.
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203256
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnastasiaD wrote:

> Подскажите пож-та, как можно удалить все пустые теги?
> т.е если после Transform получили
> <ROW>
> <TEG1>111</TEG1>
> <TEG2></TEG2>
> <TEG3>333</TEG3>
> </ROW>
> то надо удалить TEG2
>
> Oracle 9ка.

Набор тегов постоянен или заранее неизвестен?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203297
AnastasiaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov
AnastasiaD wrote:

> Подскажите пож-та, как можно удалить все пустые теги?
> т.е если после Transform получили
> <ROW>
> <TEG1>111</TEG1>
> <TEG2></TEG2>
> <TEG3>333</TEG3>
> </ROW>
> то надо удалить TEG2
>
> Oracle 9ка.

Набор тегов постоянен или заранее неизвестен?
Posted via ActualForum NNTP Server 1.4
Множество тегов не известно и они еще могут быть вложенными т.е.
<ROW>
<TEG1>111</TEG1>
<TEG2></TEG2>
<TEG3>
<teg4></teg4>
</TEG3>
</ROW>
и тогда надо удалить teg2,3,4
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203343
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
select XmlType (
'<ROW>
  <TEG1>111</TEG1>
  <TEG2></TEG2>
  <TEG3>
    <TEG4></TEG4>
  </TEG3>
</ROW>'
       ).transform (
         XmlType (
'<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:call-template name="rec"/>
    </xsl:element>
  </xsl:template>
  <xsl:template name="rec">
     <xsl:for-each select="child::node()[text()!=false()]">
        <xsl:copy>
          <xsl:value-of select="text()"/>
          <xsl:call-template name="rec"/>
        </xsl:copy>
     </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>'
         )
       ).getClobVal() no_empty_element
from DUAL;
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203399
AnastasiaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov
Код: plaintext
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.
select XmlType (
'<ROW>
  <TEG1>111</TEG1>
  <TEG2></TEG2>
  <TEG3>
    <TEG4></TEG4>
  </TEG3>
</ROW>'
       ).transform (
         XmlType (
'<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:call-template name="rec"/>
    </xsl:element>
  </xsl:template>
  <xsl:template name="rec">
     <xsl:for-each select="child::node()[text()!=false()]">
        <xsl:copy>
          <xsl:value-of select="text()"/>
          <xsl:call-template name="rec"/>
        </xsl:copy>
     </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>'
         )
       ).getClobVal() no_empty_element
from DUAL;


Спасибо! щас попробую прикрутить...
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203465
AnastasiaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov
Код: plaintext
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.
select XmlType (
'<ROW>
  <TEG1>111</TEG1>
  <TEG2></TEG2>
  <TEG3>
    <TEG4></TEG4>
  </TEG3>
</ROW>'
       ).transform (
         XmlType (
'<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:call-template name="rec"/>
    </xsl:element>
  </xsl:template>
  <xsl:template name="rec">
     <xsl:for-each select="child::node()[text()!=false()]">
        <xsl:copy>
          <xsl:value-of select="text()"/>
          <xsl:call-template name="rec"/>
        </xsl:copy>
     </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>'
         )
       ).getClobVal() no_empty_element
from DUAL;

не работет на
<ApplicationFile>
<ttt>
<ggg>234</ggg>
</ttt>
<ttt>111</ttt>
</ApplicationFile>

получаю только
<ApplicationFile>
<ttt>111</ttt>
</ApplicationFile>
а должно быть с <ggg>
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203537
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnastasiaD
не работет на
<ApplicationFile>
<ttt>
<ggg>234</ggg>
</ttt>
<ttt>111</ttt>
</ApplicationFile>

получаю только
<ApplicationFile>
<ttt>111</ttt>
</ApplicationFile>
а должно быть с <ggg>

Тогда имхо надо работать в 2 прохода: для каждого элемента сперва определять, нет ли у него детей с непустым значением и если есть, то печатать и переходить к детям.
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203662
AnastasiaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov

Тогда имхо надо работать в 2 прохода: для каждого элемента сперва определять, нет ли у него детей с непустым значением и если есть, то печатать и переходить к детям.
вложенность детей нам тоже не известна.. может же быть
<teg1>
...
<tegN>
<end>а тут или есть или нет значения</end>
</tegN>
...
</teg1>

чтото я пока туго в xsl-е соображаю..
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35203680
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnastasiaD wrote:

> вложенность детей нам тоже не известна.. может же быть

рекурсией.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35204187
Zloxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оно?
Код: plaintext
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.
SQL> select XmlType (
   2   '<ApplicationFile>
  3  <ttt>
  4  <ggg>234</ggg>
  5  <no_text><no_text></no_text></no_text>
  6  </ttt>
  7  <no_text></no_text>
  8  <ttt>111</ttt>
  9  </ApplicationFile>
 10  '
  11          ).transform (
  12            XmlType (
  13   '<?xml version="1.0"?>
 14  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 15    <xsl:template match="*">
 16      <xsl:element name="{local-name()}">
 17        <xsl:call-template name="rec"/>
 18      </xsl:element>
 19    </xsl:template>
 20    <xsl:template name="rec">
 21       <xsl:for-each select="child::node()">
 22          <xsl:if test=".//text()">
 23            <xsl:copy>
 24              <xsl:value-of select="text()"/>
 25              <xsl:call-template name="rec"/>
 26            </xsl:copy>
 27          </xsl:if>
 28       </xsl:for-each>
 29    </xsl:template>
 30  </xsl:stylesheet>'
  31            )
  32          ).getStringVal() no_empty_element
  33   from DUAL;
 
NO_EMPTY_ELEMENT
--------------------------------------------------------------------------------
<ApplicationFile>
  <ttt>
    <ggg> 234 </ggg>
  </ttt>
  <ttt> 111 </ttt>
</ApplicationFile>
 
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35208698
AnastasiaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zloxaоно?
Код: plaintext
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.
SQL> select XmlType (
   2   '<ApplicationFile>
  3  <ttt>
  4  <ggg>234</ggg>
  5  <no_text><no_text></no_text></no_text>
  6  </ttt>
  7  <no_text></no_text>
  8  <ttt>111</ttt>
  9  </ApplicationFile>
 10  '
  11          ).transform (
  12            XmlType (
  13   '<?xml version="1.0"?>
 14  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 15    <xsl:template match="*">
 16      <xsl:element name="{local-name()}">
 17        <xsl:call-template name="rec"/>
 18      </xsl:element>
 19    </xsl:template>
 20    <xsl:template name="rec">
 21       <xsl:for-each select="child::node()">
 22          <xsl:if test=".//text()">
 23            <xsl:copy>
 24              <xsl:value-of select="text()"/>
 25              <xsl:call-template name="rec"/>
 26            </xsl:copy>
 27          </xsl:if>
 28       </xsl:for-each>
 29    </xsl:template>
 30  </xsl:stylesheet>'
  31            )
  32          ).getStringVal() no_empty_element
  33   from DUAL;
 
NO_EMPTY_ELEMENT
--------------------------------------------------------------------------------
<ApplicationFile>
  <ttt>
    <ggg> 234 </ggg>
  </ttt>
  <ttt> 111 </ttt>
</ApplicationFile>
 


Огромное спасибо! так вроде работает.
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35318748
avp78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день!
может кто поможет разобраться как выбрать значение DateFrom из ниже приведённой XML-ки в табличном виде?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
    xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
    xmlns:rs="urn:schemas-microsoft-com:rowset"
    xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
    <s:ElementType name="row" content="eltOnly">
        <s:AttributeType name="DateFrom" rs:number="1" rs:nullable="true" rs:writeunknown="true">
            <s:datatype dt:type="dateTime" rs:dbtype="timestamp" dt:maxLength="16" rs:scale="0" rs:precision="19" rs:fixedlength="true"/>
        </s:AttributeType>
        <s:AttributeType name="DateTo" rs:number="2" rs:nullable="true" rs:writeunknown="true">
            <s:datatype dt:type="dateTime" rs:dbtype="timestamp" dt:maxLength="16" rs:scale="0" rs:precision="19" rs:fixedlength="true"/>
        </s:AttributeType>
        <s:extends type="rs:rowbase"/>
    </s:ElementType>
</s:Schema>
<rs:data>
    <z:row DateFrom="2007-08-01T00:00:00" DateTo="2007-08-31T00:00:00"/>
    <z:row DateFrom="2007-09-01T00:00:00" DateTo="2007-09-10T00:00:00"/>
</rs:data>
</xml>

по аналогии с таким запросом не получается :(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select extract(value(d),'//@DateFrom').getStringVal() a
from table(XMLSequence(XMLType( 
'<xml>
<data>
    <row DateFrom="2007-08-01T00:00:00" DateTo="2007-08-31T00:00:00"/>
    <row DateFrom="2007-09-01T00:00:00" DateTo="2007-09-10T00:00:00"/>
</data>
</xml>').extract('xml/data/row'))) d;
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #35325352
avp78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извините что опять поднимаю вопрос, но может кто нить поможет?
...
Рейтинг: 0 / 0
25 сообщений из 239, страница 5 из 10
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML в Oracle9i. Примеры разборки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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