Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобрать XML  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 307
Добрый день! Нужно срочно разобрать в табличный вид XML. Еще не сталкивалась с такой задачей. Не подскажите,как мне это сделать побыстрее? Нужна инфа из тега <ib>, кол-во элементов (строк) в этом теге может быть разное, набор полей у каждого элемента один

<?xml version="1.0" encoding="windows-1251" ?> 
- <user_info>
  <format_version>6</format_version> 
  <ric>78</ric> 
  <res_version>4012.00.19.68265</res_version> 
  <cons_exe_version>4000.00.21</cons_exe_version> 
- <tech_info>
- <Processors>
  <Name>Intel(R) Core(TM)2 Duo CPU T6600 @ 2.20GHz</Name> 
  <Frequency>2.19 GHz</Frequency> 
  <AllCore>2</AllCore> 
  </Processors>
  <RAM>3069</RAM> 
- <OS>
  <Name>Windows 7 Professional Edition 32-bit Service Pack 1</Name> 
  <Version Major="6" Minor="1" /> 
  <Build>7601</Build> 
  <PlatformID>2</PlatformID> 
  <Edition>Professional</Edition> 
  <Capacity>x32</Capacity> 
  <LangUI>Russian</LangUI> 
  <CompatibilityMode>Не установлен</CompatibilityMode> 
  </OS>
- <BootDisk>
  <Name>C</Name> 
  <FreeSpace>26179</FreeSpace> 
  </BootDisk>
  <Office>Microsoft Office 2010 14.0.6129.5000</Office> 
  <Browser>Google Chrome 23.0.1271.97</Browser> 
  <MailAgent>Microsoft Outlook 14.0.6126.5003</MailAgent> 
  <Rights>Administrator</Rights> 
  <DiskFreeSpace>664153</DiskFreeSpace> 
  <Users OD="0" UD="0" TS="0" VM="0" /> 
  </tech_info>
- <files>
  <USR_FILE date="17.12.2012" time="12.03.15" kind="P" uptime="00.16.53" /> 
  <info.cfg date="00.00.0000" time="00.00" /> 
  <info.cod date="31.10.2012" time="13.17" /> 
  <consult.tor date="13.12.2012" time="15.23" /> 
  </files>
- <package>
  <LAW_1 distr="521645" comp="1" ric="78" netCount="1" userType="USR" technolType="" format="1" /> 
  <ARB_8 distr="143705" comp="1" ric="78" netCount="1" userType="USR" technolType="" format="1" /> 
  </package>
- <ib>
- <LAW nDistr="521645" nComp="1" directory="LAW" name="Версия Проф" nCat="139051" nTexts="139051" n3="139051" n4="139051" n5="139051" n6="0" compliance="=HOST">
- <updates>
  <u1 date="17.12.2012" time="11.49" sysdate="17.12.2012" docs="139051" kind="P" /> 
  <u2 date="10.12.2012" time="14.13" sysdate="10.12.2012" docs="138757" kind="P" /> 
  <u3 date="06.12.2012" time="12.13" sysdate="06.12.2012" docs="138322" kind="P" /> 
  <u4 date="27.11.2012" time="13.52" sysdate="27.11.2012" docs="138096" kind="P" /> 
  <u5 date="19.11.2012" time="15.46" sysdate="19.11.2012" docs="137812" kind="P" /> 
  <u6 date="12.11.2012" time="14.21" sysdate="12.11.2012" docs="137556" kind="P" /> 
  <u7 date="06.11.2012" time="13.29" sysdate="06.11.2012" docs="137316" kind="P" /> 
  <u8 date="29.10.2012" time="13.10" sysdate="29.10.2012" docs="137020" kind="P" /> 
  <u9 date="22.10.2012" time="11.42" sysdate="22.10.2012" docs="136717" kind="P" /> 
  <u10 date="16.10.2012" time="13.54" sysdate="16.10.2012" docs="136447" kind="R" /> 
  </updates>
  </LAW>
- <ARB nDistr="143705" nComp="1" directory="ARB" name="Решения высших судов" nCat="308252" nTexts="308252" n3="308252" n4="308252" n5="308252" n6="0" compliance="=HOST">
- <updates>
  <u1 date="17.12.2012" time="11.58" sysdate="17.12.2012" docs="308252" kind="P" /> 
  <u2 date="11.12.2012" time="14.58" sysdate="11.12.2012" docs="306961" kind="P" /> 
  <u3 date="06.12.2012" time="12.54" sysdate="06.12.2012" docs="305496" kind="P" /> 
  <u4 date="27.11.2012" time="14.07" sysdate="27.11.2012" docs="304092" kind="P" /> 
  <u5 date="19.11.2012" time="15.53" sysdate="19.11.2012" docs="302854" kind="P" /> 
  <u6 date="12.11.2012" time="14.26" sysdate="12.11.2012" docs="301677" kind="P" /> 
  <u7 date="06.11.2012" time="13.38" sysdate="06.11.2012" docs="300772" kind="P" /> 
  <u8 date="29.10.2012" time="13.16" sysdate="29.10.2012" docs="299776" kind="P" /> 
  <u9 date="22.10.2012" time="11.49" sysdate="22.10.2012" docs="298771" kind="P" /> 
  <u10 date="16.10.2012" time="13.54" sysdate="16.10.2012" docs="297615" kind="R" /> 
  </updates>
  </ARB>
  </ib>
  </user_info>
9 апр 13, 14:44    [14156794]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 307
SOS!!!!
9 апр 13, 15:56    [14157409]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
Glory
Member

Откуда:
Сообщений: 104751
ElenaLeont
SOS!!!!

BOL - OPENXML
9 апр 13, 16:06    [14157507]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 307
результат нужен в виде таблицы, format из тега <package>, из тега <updates> достаточно значений из строки u1

[CSV]
directory nDistr format name compliance date time sysdate docs kind
ARB 143705 1 Решения высших судов =HOST 17.12.2012 11.58 17.12.2012 308252 P
[/CSV]
9 апр 13, 16:12    [14157561]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
Glory
Member

Откуда:
Сообщений: 104751
ElenaLeont
результат нужен в виде таблицы

Хорошо. Делайте в виде таблицы.
9 апр 13, 16:13    [14157570]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 307
не пойму как мне обратиться к данным в теге ib, они все время могут иметь разное название и количество, в приведенном примере есть <LAW>, <ARB> в других файлах могут быть совсем другие
9 апр 13, 16:29    [14157722]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
Glory
Member

Откуда:
Сообщений: 104751
ElenaLeont
в приведенном примере есть <LAW>, <ARB> в других файлах могут быть совсем другие

И вы хотите написать универсальный запрос для разбора файла с любым произольным числом тэгов под тэгом <ib> ?
Причем срочно ?
9 апр 13, 16:39    [14157783]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 307
мне НУЖНО это сделать, подскажите, можно ли получить из тега ib перечень названий вложенных тегов <LAW>, <ARB> и тп?
9 апр 13, 16:52    [14157916]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
el_sh
Member

Откуда:
Сообщений: 360
ElenaLeont,
Возможно так.
DECLARE @idoc INT 
DECLARE @TEG VARCHAR(200)

SET @TEG = '/user_info/ib'
 SELECT  localname,
                            localname
                    FROM    ( ( SELECT  id
                                FROM    OPENXML (@idoc, @TEG,1)
                                WHERE   parentid = 0
                              ) t
                              INNER JOIN ( SELECT   parentid,
                                                    localname
                                           FROM     OPENXML (@idoc, @TEG,1)
                                         ) t1 ON t1.parentid = t.id

А потом в курсоре читать updates
9 апр 13, 17:13    [14158081]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 307
что такое id не пойму?
9 апр 13, 17:21    [14158141]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
dalex1973
Member

Откуда: Польша
Сообщений: 287
ElenaLeont,
SELECT
   b.value('local-name(.)','nvarchar(max)') directory ,
   b.value('@nDistr'      ,'nvarchar(max)') nDistr    ,
   b.value('@nComp'       ,'nvarchar(max)') nComp     ,
   b.value('@directory'   ,'nvarchar(max)') directory ,
   b.value('@name'        ,'nvarchar(max)') name      ,
   b.value('@nCat'        ,'nvarchar(max)') nCat      ,
   b.value('@nTexts'      ,'nvarchar(max)') nTexts    ,
   b.value('@n3'          ,'nvarchar(max)') n3        ,
   b.value('@n4'          ,'nvarchar(max)') n4        ,
   b.value('@n5'          ,'nvarchar(max)') n5        ,
   b.value('@n6'          ,'nvarchar(max)') n6        ,
   b.value('@compliance'  ,'nvarchar(max)') compliance,
   d.value('./@date'      ,'nvarchar(max)') date      ,
   d.value('./@time'      ,'nvarchar(max)') time      ,
   d.value('./@sysdate'   ,'nvarchar(max)') sysdate   ,
   d.value('./@docs'      ,'nvarchar(max)') docs      ,
   d.value('./@kind'      ,'nvarchar(max)') kind      
FROM @XMl.nodes('/user_info/ib/*') a(b)
CROSS APPLY a.b.nodes('updates[1]/*[1]') c(d))
9 апр 13, 17:22    [14158144]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать XML  [new]
ElenaLeont
Member

Откуда: Екатеринбург
Сообщений: 307
СПАСИБО ОГРОМНОЕ dalex1973 , ТО ЧТО НУЖНО!!!!
10 апр 13, 11:09    [14160523]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить