powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / загрузка xml
25 сообщений из 25, страница 1 из 1
загрузка xml
    #35578177
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна помощь!

загружаю xml файл в таблицу. В файле есть данные такого типа:

<docno>БРн-057</docno>
<currencycode>Рубль</currencycode>
<comment>Расходная накладная №БРн-057 от 25.10</comment>

которые загружаться не хотят (illegal xml character)

код, который загружает эти элементы:

isnull(t.rows.value('docno[1]','nvarchar(255)'),'') as [docno],
isnull(t.rows.value('currencycode[1]','nvarchar(255)'),'') as [currencycode],

Подскажите, как исправить ошибку, как правильно выгрузить данные?
...
Рейтинг: 0 / 0
загрузка xml
    #35578265
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А файл в какой кодировке ? А какой encoding указан в нем ?
...
Рейтинг: 0 / 0
загрузка xml
    #35578307
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<?xml version="1.0" encoding="utf-8"?>
...
Рейтинг: 0 / 0
загрузка xml
    #35600193
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребят помогите пожалуйста, проблема осталась...
хоть какие-нибудь идеи...
...
Рейтинг: 0 / 0
загрузка xml
    #35600199
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bruin_Baluребят помогите пожалуйста, проблема осталась...
хоть какие-нибудь идеи...
А на вопросы ответите ?
...
Рейтинг: 0 / 0
загрузка xml
    #35600208
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bruin_Balu<?xml version="1.0" encoding="utf-8"?>

вроде такая кодировка, или Вы что-то другое имеете ввиду?
...
Рейтинг: 0 / 0
загрузка xml
    #35600212
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bruin_BaluBruin_Balu<?xml version="1.0" encoding="utf-8"?>

вроде такая кодировка, или Вы что-то другое имеете ввиду?
Вопроса было два
А файл в какой кодировке ?
А какой encoding указан в нем ?
Вы ответили на второй
...
Рейтинг: 0 / 0
загрузка xml
    #35600257
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм... затрудняюсь ответить на Ваш вопрос... файл я скачиваю с FTP в таком виде:

<?xml version="1.0" encoding="utf-8"?>
<docs>
<doc>
<A>text1</A>
<B>text2<B>
<C>2008-10-17</C>
<docno>БРн-015</docno>
<comment>Расходная накладная №БРн-057 от 25.10</comment>
<currencycode>Рубль</currencycode>
<D>1</D>
</doc>
</docs>


задача загрузить эти данные в реляционные таблицы (MS SQL Server 2005)...
не загружаются только эти данные

<docno>БРн-015</docno>
<comment>Расходная накладная №БРн-057 от 25.10</comment>
<currencycode>Рубль</currencycode>

т.е. если их "руками" удалить из файла, все остальное в таблицу загрузится корректно.

Как определить кодировку файла?
...
Рейтинг: 0 / 0
загрузка xml
    #35600272
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если открыть файл в Notepad, выбрать Save as то какое значение будет в Encoding ?
...
Рейтинг: 0 / 0
загрузка xml
    #35600290
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UTF-8
...
Рейтинг: 0 / 0
загрузка xml
    #35600339
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bruin_BaluUTF-8
И как и куда именно вы загружаете этот файл в MSSQL ?
...
Рейтинг: 0 / 0
загрузка xml
    #35600440
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
данные вставляю в таблицу
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[test_table](
[A] [nvarchar](max) NULL,
[B] [nvarchar](max) NULL,
[C] [nvarchar](max) NULL,
[docno] [nvarchar](max) NULL,
[currencycode] [nvarchar](max) NULL,
[comment] [nvarchar](max) NULL,
[D] [nvarchar](max) NULL
) ON [PRIMARY]

примерно так:

declare @FilePath nvarchar(250)
set @FilePath= ''
declare @SQLString nvarchar(2000)
declare @xml xml

set @SQLString='select @xml_out = (SELECT dxml.* FROM OPENROWSET(BULK N'''+@FilePath+''', SINGLE_CLOB) as dxml )'

exec sp_executesql @SQLString,N'@xml_out xml output', @xml_out = @xml output

if object_id(N'tempdb..#xml ') is not null drop table #xml
select

isnull(t.rows.value('(A)[1]','nvarchar(MAX)'),'') as [A],
isnull(t.rows.value('(B)[1]','nvarchar(MAX)'),'') as [B],
isnull(t.rows.value('(C)[1]','nvarchar(MAX)'),'') as [C],
isnull(t.rows.value('(docno)[1]','nvarchar(MAX)'),'') as [docno],
isnull(t.rows.value('(currencycode)[1]','nvarchar(MAX)'),'') as [currencycode],
isnull(t.rows.value('(comment)[1]','nvarchar(MAX)'),'') as [comment],
isnull(t.rows.value('(D)[1]','nvarchar(MAX)'),'') as [D],
into #xml
from @xml.nodes('/docs/doc') as t(rows)

Insert into [test].[dbo].[test_table]
select * from #xml
...
Рейтинг: 0 / 0
загрузка xml
    #35600454
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему SINGLE_CLOB, если у вас кодировка UTF8 ?
...
Рейтинг: 0 / 0
загрузка xml
    #35600496
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если поставить SINGLE_NCLOB пишет: SINGLE_NCLOB requires a UNICODE (widechar) input file. The file specified is not Unicode.
...
Рейтинг: 0 / 0
загрузка xml
    #35600509
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bruin_Baluесли поставить SINGLE_NCLOB пишет: SINGLE_NCLOB requires a UNICODE (widechar) input file. The file specified is not Unicode.
Тогда придется файл записывать в ANSI кодировке.
...
Рейтинг: 0 / 0
загрузка xml
    #35600514
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bruin_Balu,
а теперь открываем FAR по F4 файл и смотрим..... скорее всего файл таки не в юникоде, сие ві сразу увидите
...
Рейтинг: 0 / 0
загрузка xml
    #35601250
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bruin_Baluесли поставить SINGLE_NCLOB пишет: SINGLE_NCLOB requires a UNICODE (widechar) input file. The file specified is not Unicode.
А если поставить SINGLE_CLOB то: XML parsing: line 11, character 6, end tag does not match start tag
...
Рейтинг: 0 / 0
загрузка xml
    #35601255
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<B>text2 <B>
...
Рейтинг: 0 / 0
загрузка xml
    #35601283
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага, прошу прощения:

<?xml version="1.0" encoding="utf-8"?>
<docs>
<doc>
<A>text1</A>
<B>text2</B>
<C>2008-10-17</C>
<docno>БРн-015</docno>
<comment>Расходная накладная №БРн-057 от 25.10</comment>
<currencycode>Рубль</currencycode>
<D>1</D>
</doc>
</docs>

не загружаются только русские символы. Дело не базе: для теста достаточно проверить этот код:
declare @FilePath nvarchar(250)
set @FilePath= ''
declare @SQLString nvarchar(2000)
declare @xml xml

set @SQLString='select @xml_out = (SELECT dxml.* FROM OPENROWSET(BULK N'''+@FilePath+''', SINGLE_CLOB) as dxml )'

exec sp_executesql @SQLString,N'@xml_out xml output', @xml_out = @xml output


кодировка точно UTF-8
Если пересохранить этот файл в формат Unicode и удалить encoding="utf-8" (поменять еще в коде на SINGLE_NCLOB) то выгружается корректно...
...
Рейтинг: 0 / 0
загрузка xml
    #35601292
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MniorBruin_Baluесли поставить SINGLE_NCLOB пишет: SINGLE_NCLOB requires a UNICODE (widechar) input file. The file specified is not Unicode.
А если поставить SINGLE_CLOB то: XML parsing: line 11, character 6, end tag does not match start tagА вот через sp_OACreate:
Код: 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.
DECLARE	 @OLEStream	Int
	,@File		SysName
	,@EOF		Bit
	,@Response	NVarChar(max)
	,@ErrCode	Int
	,@ErrMethod	SysName
	,@ErrSource	SysName
	,@ErrDescript	SysName

SELECT	 @File		= '<FilePath>'
	,@Response	= ''

EXEC @ErrCode = sys.sp_OACreate 'ADODB.Stream' ,@OLEStream OUT
IF (@ErrCode !=  0 )
	SELECT	 @ErrMethod	= 'ADODB.Stream'
		,@ErrSource	= 'sp_OACreate'
		,@ErrDescript	= 'Ошибка создания OLE объекта'
ELSE BEGIN
	EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'Open'							IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'Open'		GOTO StreamError END
	EXEC @ErrCode = sys.sp_OASetProperty @OLEStream ,'CharSet' ,'utf-8'					IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'CharSet'		GOTO StreamError END
	EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'LoadFromFile' ,NULL, @File					IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'LoadFromFile'	GOTO StreamError END
	-- Для обхода "особенности" чтения utf-8
	EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'ReadText' ,@ErrDescript OUT,  2 				IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'ReadText'		GOTO StreamError END
PRINT	 1 
	-- Рекурсивное порциальное чтение
	WHILE ( 1  =  1 ) BEGIN
PRINT	 0 
		-- Проверка достижения конца файла
		EXEC @ErrCode = sys.sp_OAGetProperty @OLEStream ,'EOS' ,@EOF OUT				IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'EOS'			GOTO StreamError END
		IF (@EOF =  1 ) BREAK
		-- Чтение очережной порции
		EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'ReadText' ,@ErrDescript OUT,  128 			IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'ReadText'		GOTO StreamError END
		SET @Response = @Response + @ErrDescript
	END
	-- Закрытие Stream
	EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'Close'							IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'Close'		GOTO StreamError END
	-- Уничтожение Stream
	GOTO StreamDestroy
	StreamError:	EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEStream ,@ErrSource OUT ,@ErrDescript OUT
	StreamDestroy:	EXEC @ErrCode = sys.sp_OADestroy @OLEStream
END
-- Вывод ошибок
IF (@ErrSource IS NOT NULL)
	RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s', 18 , 1 ,@ErrMethod,@ErrSource,@ErrDescript)
ELSE
	SELECT	@Response
Работает на ура.
...
Рейтинг: 0 / 0
загрузка xml
    #35601304
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принты забыл убрать.
...
Рейтинг: 0 / 0
загрузка xml
    #35601335
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mnior, действительно, работает на ура!
только мне до сих пор непонятно чем мой метод был плох?
...
Рейтинг: 0 / 0
загрузка xml
    #35601342
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bruin_BaluMnior, действительно, работает на ура!
только мне до сих пор непонятно чем мой метод был плох?
Тем, что "SQL Server 2005 stores XML data using the UTF-16 encoding scheme."
...
Рейтинг: 0 / 0
загрузка xml
    #35601352
Bruin_Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное всем спасибо за помощь!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
загрузка xml
    #39819178
le7els
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mnior, добрый день. Передо мной стоит такая же задача загрузить xml-файл в таблицу. Реализация через sp_OACreate как и у вас, но возникли проблемы. Не нашел на форуме как я могу к вам в личку написать.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / загрузка xml
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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