Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите расспарсить xml  [new]
xmlhelp
Guest
есть xml вида
<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" rs:CommandTimeout="30" rs:updatable="true">
      <s:AttributeType name="c0" rs:name="Document Type" rs:number="1" rs:writeunknown="true" rs:basecatalog="bile" rs:baseschema="dbo" rs:basetable="Sales" rs:basecolumn="Document Type" rs:keycolumn="true">
        <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false" />
      </s:AttributeType>
      <s:extends type="rs:rowbase" />  </s:ElementType>
  </s:Schema>
  <rs:data>
    <z:row c0="1" />
  </rs:data>
</xml>

как такое получить в виде таблички ??
[Document Type]
1
21 ноя 11, 14:03    [11631806]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
xmlhelp
Guest
тут проблема в том, что в
  <rs:data>
    <z:row c0="1" />
  </rs:data>
может быть и так
  <rs:data>
    <z:row c0="1" с2="19.01.2011" No_="abcd"/>
  </rs:data>

как динамически обработать rs:data с разбитием по столбцам?
21 ноя 11, 15:11    [11632429]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
Konst_One
Member

Откуда:
Сообщений: 11623
Через call template, по имени аттрибутов в конктретном row
21 ноя 11, 15:21    [11632528]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
xmlhelp
есть xml вида
<xml xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
  <s:Schema id="RowsetSchema">
как динамически обработать

Зачем DataSet/DataTable с .Net переводить в XML (нгенерация, а потом парсирование)
Используйте табличные параметры (там даже примеры на .Net есть)
21 ноя 11, 18:54    [11634210]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
xmlhelp
Guest
Mnior,
в том и дело что это не net
22 ноя 11, 10:55    [11636141]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
- А дальше не идите налево, а продол...

xmlhelp
в том и дело что это не net
Но откуда это, вы сказать побоялись?
Т.е. сказать где генерируюется XML и как он доставляется на сервер вы будете умалчиват как партизан.

Файл? PowerPivot Excel / ADO Recordset / Другие продукты MS ?

Только не говорите сразу всё, а то так разговор не растянешь на неделю.
22 ноя 11, 16:37    [11638977]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
xmlhelp
Guest
Mnior, спокойнее.

данные генерирует ado.recordset.

сделал запрос типа
;WITH XMLNAMESPACES ('uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' AS s,'urn:schemas-microsoft-com:rowset' AS rs
								,'#RowsetSchema' as z,'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' as dt)						
		SELECT t.a.value('./@c0)','nvarchar(max)')
		FROM @xml.nodes('//rs:data/z:row') t(a)

здесь написал по памяти. Он генерится динамически. Вообщем проблема решена.
Теперь возникла другая проблема:
Если столбцов около 30ти штук, и строк z:row более 1000 то запрос выполняется очень медленно.
Есть ли возможность оптимизировать этот запрос, чтобы select выполнялся быстрее?

по подсчетам ~2000 строк вытаскиваются около минуты
23 ноя 11, 10:27    [11642324]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
xmlhelp
Guest
Тему можно закрывать.

openxml дает хороший прирост производительности вместо @xml.nodes()
23 ноя 11, 11:16    [11642691]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
xmlhelp
данные генерирует ado.recordset
Вы совершенно не слушаете, и упёрлись.
Зачем из ADO генерировать XML и потом жаловаться что тормозит парсирование.
Загоняйте RecorSet прямиком в таблицу.

xmlhelp
openxml дает хороший прирост производительности вместо @xml.nodes()
Прямая запись RecordSet или XmlBulkLoad в 100500 раз быстрее.

PS: Скорее всего этот быдлокодер уже и не прочитает этот топик.
23 ноя 11, 16:00    [11645796]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
xmlhelp
Guest
Mnior, слыш, умник. Может подскажешь тогда как осуществить "Прямая запись RecordSet "

p.s. выносить мнение о ком-то, не знаю сути и задачи, верх тупости. Не считаешь?
26 ноя 11, 17:53    [11664316]     Ответить | Цитировать Сообщить модератору
 Re: помогите расспарсить xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
+ xmlhelp
xmlhelp
слыш, умник.
Заметьте, никого я не оскорблял, а говорил о действиях (или их отсутствии). Вы понимаете разницу?!
В ваших же силах в дальнейшем вести разговор более конструктивно и выдавать существенную информацию сразу же. Вот ссылки на правила и главный топик форума.
Только вот не надо этого "Меня оскорбили, ещё и виноватым оказался".

xmlhelp
выносить мнение о ком-то
Где? В каком слове? В какой букве?
xmlhelp
выносить мнение, не знаю сути и задачи, верх тупости.
Вверх тупости не анализировать и не выносить мнение о чём либо. Тем более не анализировать вообще.
Это есть основной и единственный способ познания окружающего: cтроить предположения и проверять их. И мастерство ставить правильно. И никакое умение не придёт сам собой без практики.

Зомби-ферма
arilou_camper
Сейчас индустрия уже не торт. Огромный спрос на IT-специалистов породил поколение похуистов — «я работаю с 9 до 18, час на обед, мои обязанности — программировать то, что скажут; все что вне моего рабочего Фокуса — меня не интересует».

xmlhelp
Может подскажешь тогда как осуществить "Прямая запись RecordSet "
1. А где вопрос про XmlBulkLoad? (на TSQL: 8075805)
2. ADO обсуждается в другом, в профильном форуме (например).
3. И когда же мы перестанем вытаскивать информацию из вас клещами? (Хотя ничего нового с первого поста и не сказано)
Огласите сразу первоначальную задачу. Даже если вы скажите в каком окружении этот ADO RecordSet этого будет чертовски мало.
4. Вполне вероятно, что и этот ADO RecordSet может излишеством как и XML.
3. UpdateBatch, у SqlBulkCopy другой интерфейс. Или вы хотите готовый код? (предварительно прочитав ваши мысли) (да и примеров в инете пруд пруди)
27 ноя 11, 15:37    [11666821]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить