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

Откуда: Москва
Сообщений: 2076
От наших зарубежных партнеров получаем отчеты такого вида
<?xml version="1.0"?>
<DATABASE>
<RECORD>
<FIELD>
<NAME>FatTar</NAME>
<VALUE>05/01/2004</VALUE>
</FIELD>
<FIELD>
<NAME>FatNsu</NAME>
<VALUE>405221</VALUE>
</FIELD>
<FIELD>
<NAME>UrnKod</NAME>
<VALUE>AXDA2500BOX</VALUE>
</FIELD>
<FIELD>
<NAME>FirUnv</NAME>
<VALUE>ARENA BILG.SAN.VE TIC. A.S.
</VALUE>
</FIELD>
<FIELD>
<NAME>Ser</NAME>
<VALUE>500101300722S</VALUE>
</FIELD>
</RECORD>
</DATABASE>
Возможно ли сделать выборку из XML такого вида? У меня выбираются только первые два поля -(( Изменить структуру XML нельзя, его генерит их ERP система..

SELECT * FROM OPENXML(@hdoc, '//RECORD')
WITH(
p1 varchar(100) './/NAME',
p2 varchar(100) './/VALUE',
p3 varchar(100) './/NAME',
p4 varchar(100) './/NAME',
p5 varchar(100) './/NAME')
20 апр 04, 17:55    [638874]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Тебе какой надо набор на выходе?

Удачи
20 апр 04, 18:12    [638928]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Если парами, то так можно:

declare @hdoc int

EXECUTE sp_xml_preparedocument @hdoc OUTPUT, '<?xml version="1.0"?>
<DATABASE>
<RECORD>
<FIELD>
<NAME>FatTar</NAME>
<VALUE>05/01/2004</VALUE>
</FIELD>
<FIELD>
<NAME>FatNsu</NAME>
<VALUE>405221</VALUE>
</FIELD>
<FIELD>
<NAME>UrnKod</NAME>
<VALUE>AXDA2500BOX</VALUE>
</FIELD>
<FIELD>
<NAME>FirUnv</NAME>
<VALUE>ARENA BILG.SAN.VE TIC. A.S.</VALUE>
</FIELD>
<FIELD>
<NAME>Ser</NAME>
<VALUE>500101300722S</VALUE>
</FIELD>
</RECORD>
</DATABASE>
'


SELECT * FROM OPENXML(@hdoc, '/DATABASE/RECORD/FIELD')
WITH(
[Name] varchar(100) './/NAME',
[Value] varchar(100) './/VALUE'
)

EXECUTE sp_xml_removedocument @hdoc


Удачи
20 апр 04, 18:16    [638945]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
Ден
Member

Откуда: Москва
Сообщений: 2076
Эх, хотелось бы что <RECORD></RECORD> было бы одной записью.. Можно сделать, как ты показал (это один из вариантов), но уж больно много данных (сотни тысяч в каждом отчете).. Вот извратились с форматом XML
20 апр 04, 18:23    [638967]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
Владимирм_2
Member

Откуда: Город корабелов ->Calgary (Alberta), Canada
Сообщений: 187
Если бы был нормальный файл со схемой в придачу, то можно наладить заливку через ActiveX в DTS....Документация к SQLXML 3.0 содержит ряд примеров...
20 апр 04, 18:37    [639003]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
Ден
Member

Откуда: Москва
Сообщений: 2076
Схема кстати есть, только как её прикрутить для OPENXML
<?xml version="1.0" encoding="windows-1254" ?>
- <xsl:stylesheet xmlns:xsl="uri:xsl">
- <xsl:template match="/">
- <HTML>
<HEAD />
- <BODY>
- <TABLE BORDER="1" cellspacing="0" width="600">
- <THEAD>
- <TR>
<TH colspan="5">AMD SERIAL NUMBERS</TH>
</TR>
</THEAD>
- <TR style="font-family: Arial; font-size: 12px; font-weight: bold" bgcolor="#A0A0A0">
<TD width="85">Date</TD>
<TD width="80">Inv.No</TD>
<TD width="100">Prod.Code</TD>
<TD width="250">Customer</TD>
<TD width="85">Serial</TD>
</TR>
- <xsl:for-each select="//RECORD">
- <TR style="font-family: Arial; font-size: 12px">
- <xsl:for-each select="FIELD">
- <TD>
<xsl:value-of select="VALUE" />
</TD>
</xsl:for-each>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
20 апр 04, 18:41    [639012]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Это не схема, а XSLT.
Сейчас дам рабочий вариант...
20 апр 04, 18:50    [639025]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
Ден
Member

Откуда: Москва
Сообщений: 2076
Да я с админом erp системы поговорил, говорит есть возможность выгружать в нормальный вид.. Хотя все равно интересно как средствами sql такой формат обработать..
20 апр 04, 18:51    [639029]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
declare @hdoc int

EXECUTE sp_xml_preparedocument @hdoc OUTPUT, '<?xml version="1.0"?>
<DATABASE>
<RECORD>
<FIELD>
<NAME>FatTar</NAME>
<VALUE>05/01/2004</VALUE>
</FIELD>
<FIELD>
<NAME>FatNsu</NAME>
<VALUE>405221</VALUE>
</FIELD>
<FIELD>
<NAME>UrnKod</NAME>
<VALUE>AXDA2500BOX</VALUE>
</FIELD>
<FIELD>
<NAME>FirUnv</NAME>
<VALUE>ARENA BILG.SAN.VE TIC. A.S.</VALUE>
</FIELD>
<FIELD>
<NAME>Ser</NAME>
<VALUE>500101300722S</VALUE>
</FIELD>
</RECORD>
</DATABASE>
'


SELECT *
FROM OPENXML(@hdoc, '/DATABASE/RECORD/')
WITH
(
[Name] varchar(100) './/FIELD[1]/NAME',
[Value] varchar(100) './/FIELD[1]/VALUE',
[Name] varchar(100) './/FIELD[2]/NAME',
[Value] varchar(100) './/FIELD[2]/VALUE',
[Name] varchar(100) './/FIELD[3]/NAME',
[Value] varchar(100) './/FIELD[3]/VALUE',
[Name] varchar(100) './/FIELD[4]/NAME',
[Value] varchar(100) './/FIELD[4]/VALUE',
[Name] varchar(100) './/FIELD[5]/NAME',
[Value] varchar(100) './/FIELD[5]/VALUE'
)

EXECUTE sp_xml_removedocument @hdoc


Естественно, тут забиваемся на то, что в одном RECORD - железно 5 FIELD

Удачи
20 апр 04, 18:53    [639032]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
Ден
Member

Откуда: Москва
Сообщений: 2076
СПАСИБО!!!!
20 апр 04, 18:55    [639037]     Ответить | Цитировать Сообщить модератору
 Re: А возможно ли разобрать стредствами MSSQL XML такого вида...  [new]
желаю знать почему
Member

Откуда: St. Petersburg
Сообщений: 60
Это не схема а XSL template чтоб из этого xml сделать HTML

declare @hdoc int

EXECUTE sp_xml_preparedocument @hdoc OUTPUT, '<?xml version="1.0"?>
<DATABASE>
<RECORD>
<FIELD>
<NAME>FatTar</NAME>
<VALUE>05/01/2004</VALUE>
</FIELD>
<FIELD>
<NAME>FatNsu</NAME>
<VALUE>405221</VALUE>
</FIELD>
<FIELD>
<NAME>UrnKod</NAME>
<VALUE>AXDA2500BOX</VALUE>
</FIELD>
<FIELD>
<NAME>FirUnv</NAME>
<VALUE>ARENA BILG.SAN.VE TIC. A.S.</VALUE>
</FIELD>
<FIELD>
<NAME>Ser</NAME>
<VALUE>500101300722S</VALUE>
</FIELD>
</RECORD>
</DATABASE>
'


SELECT * FROM OPENXML(@hdoc, '/DATABASE/RECORD')
WITH(
[FatTar] datetime 'FIELD[NAME = ''FatTar'']/VALUE',
[FatNsu] int 'FIELD[NAME = ''FatNsu'']/VALUE',
...
)

EXECUTE sp_xml_removedocument @hdoc
20 апр 04, 18:59    [639048]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить