powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OPEMXML
6 сообщений из 6, страница 1 из 1
OPEMXML
    #32074807
АМС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой документ:
Код: 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.
<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:updatable=''true''>
		<s:AttributeType name=''c0'' rs:name=''УникИд'' rs:number=''1'' rs:writeunknown=''true'' rs:basecatalog=''ВЕЩИ''
			 rs:baseschema=''dbo'' rs:basetable=''ГруппыТовара'' rs:basecolumn=''УникИд''>
			<s:datatype dt:type=''uuid'' dt:maxLength=''16'' rs:fixedlength=''true'' rs:maybenull=''false''/>
		</s:AttributeType>
		<s:AttributeType name=''c1'' rs:name=''СлужДата'' rs:number=''2'' rs:writeunknown=''true'' rs:basecatalog=''ВЕЩИ''
			 rs:baseschema=''dbo'' rs:basetable=''ГруппыТовара'' rs:basecolumn=''СлужДата''>
			<s:datatype dt:type=''dateTime'' rs:dbtype=''timestamp'' dt:maxLength=''16'' rs:scale=''3'' rs:precision=''23'' rs:fixedlength=''true''
			 rs:maybenull=''false''/>
		</s:AttributeType>
		<s:AttributeType name=''c2'' rs:name=''Источник'' rs:number=''3'' rs:writeunknown=''true'' rs:basecatalog=''ВЕЩИ''
			 rs:baseschema=''dbo'' rs:basetable=''ГруппыТовара'' rs:basecolumn=''Источник''>
			<s:datatype dt:type=''i2'' dt:maxLength=''2'' rs:precision=''5'' rs:fixedlength=''true'' rs:maybenull=''false''/>
		</s:AttributeType>
		<s:AttributeType name=''c3'' rs:name=''КодГруппы'' rs:number=''4'' rs:writeunknown=''true'' rs:basecatalog=''ВЕЩИ''
			 rs:baseschema=''dbo'' rs:basetable=''ГруппыТовара'' rs:basecolumn=''КодГруппы'' rs:keycolumn=''true''>
			<s:datatype dt:type=''string'' rs:dbtype=''str'' dt:maxLength=''20'' rs:maybenull=''false''/>
		</s:AttributeType>
		<s:extends type=''rs:rowbase''/>
	</s:ElementType>
</s:Schema>
<rs:data>
	<z:row c0=''{13B3F4C0-76AE-43BF-A896-1D8DE5F32817}'' c1=''2002- 11 -22T14: 33 : 59 . 750000000 '' c2=''1'' c3=''Непомню''/>
</rs:data>
</xml>

Пытаюсь его распарсить с помощью запроса:
select * from openxml(@doc,'/xml/rs:data/z:row',0) with (c0 varchar(50))
Возвращает ошибку: XML parsing error: Reference to undeclared namespace prefix: 'rs'.
Как добиться того, чтобы парсер не воспринимал двоеточие как знак префикса пространства имён??
...
Рейтинг: 0 / 0
OPEMXML
    #32074814
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас неправильный XML
Вы пробовали заменять две одинарные кавычки на просто одинарные?
...
Рейтинг: 0 / 0
OPEMXML
    #32074818
АМС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vap'у
XML у меня совершенно правильный. Он формируется функцией SaveToFile из Delphi и легко загружается назад ф-ей LoadFromFile. Вопрос был в другом:
как заставить парсер считать консткуцию ns:tag неразделимым тэгом?
...
Рейтинг: 0 / 0
OPEMXML
    #32074834
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот работающий пример, возможно есть более изящные решения,

Код: 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.
declare @str  varchar( 8000 )
set @str ='<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:updatable="true">
      <s:AttributeType name="c0" rs:name="УникИд" rs:number="1" rs:writeunknown="true" rs:basecatalog="ВЕЩИ" rs:baseschema="dbo" rs:basetable="ГруппыТовара" rs:basecolumn="УникИд">
        <s:datatype dt:type="uuid" dt:maxLength="16" rs:fixedlength="true" rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="c1" rs:name="СлужДата" rs:number="2" rs:writeunknown="true" rs:basecatalog="ВЕЩИ" rs:baseschema="dbo" rs:basetable="ГруппыТовара" rs:basecolumn="СлужДата">
        <s:datatype dt:type="dateTime" rs:dbtype="timestamp" dt:maxLength="16" rs:scale="3" rs:precision="23" rs:fixedlength="true" rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="c2" rs:name="Источник" rs:number="3" rs:writeunknown="true" rs:basecatalog="ВЕЩИ" rs:baseschema="dbo" rs:basetable="ГруппыТовара" rs:basecolumn="Источник">
        <s:datatype dt:type="i2" dt:maxLength="2" rs:precision="5" rs:fixedlength="true" rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="c3" rs:name="КодГруппы" rs:number="4" rs:writeunknown="true" rs:basecatalog="ВЕЩИ" rs:baseschema="dbo" rs:basetable="ГруппыТовара" rs:basecolumn="КодГруппы" rs:keycolumn="true">
        <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="20" rs:maybenull="false"/>
      </s:AttributeType>
      <s:extends type="rs:rowbase"/>
    </s:ElementType>
  </s:Schema>
  <rs:data>
    <z:row c0="{13B3F4C0-76AE-43BF-A896-1D8DE5F32817}" c1="2002-11-22T14:33:59.750000000" c2="1" c3="Непомню"/>
  </rs:data>
</xml>'

set @str = replace(@str, 'rs:data', 'data')
set @str = replace(@str, 'z:row', 'row')

DECLARE @hdoc INT
EXEC sp_xml_preparedocument @hdoc  OUTPUT, @str OUTPUT
SELECT * FROM OPENXML(@hdoc, '//row') WITH(c0 VARCHAR( 80 ))
EXEC sp_xml_removedocument @hdoc
...
Рейтинг: 0 / 0
OPEMXML
    #32074835
АМС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение хорошее!! Я сразу не догадался. Но дело в том, что файлы могут быть размером десятки мегабайт. Боюсь замена займёт много времени.
...
Рейтинг: 0 / 0
OPEMXML
    #32075973
АМС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А более правильно использовать параметр "openspaces" процедуры sp_xml_preparedocument
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DECLARE @hdoc INT
EXEC sp_xml_preparedocument @hdoc  OUTPUT, @str OUTPUT, 
'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'''
SELECT * FROM OPENXML(@hdoc, '//rs:data/z:row') WITH(c0 VARCHAR( 80 ))
EXEC sp_xml_removedocument @hdoc
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OPEMXML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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