DECLARE @idoc int
DECLARE @doc nvarchar(2000)
SET @doc = '<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHotelDetail><HotelDetail><id>00101006</id>
<name>刘德华</name><country>China</country>
</HotelDetail></ArrayOfHotelDetail>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc SELECT * FROM OPENXML (@idoc, '/ArrayOfHotelDetail/HotelDetail', 2)
WITH (id char(15),
name nvarchar(50),
country nvarchar(50) ) EXEC sp_xml_removedocument @idoc
消息 6602,级别 16,状态 2,过程 sp_xml_preparedocument,第 1 行
错误说明是 '不支持从当前编码到指定编码的切换。'。
消息 8179,级别 16,状态 5,第 11 行
找不到句柄为 0 的预定义语句。
消息 6607,级别 16,状态 3,过程 sp_xml_removedocument,第 1 行
sp_xml_removedocument: 为参数 1 提供的值无效。
DECLARE @doc nvarchar(2000)
SET @doc = '<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHotelDetail><HotelDetail><id>00101006</id>
<name>刘德华</name><country>China</country>
</HotelDetail></ArrayOfHotelDetail>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc SELECT * FROM OPENXML (@idoc, '/ArrayOfHotelDetail/HotelDetail', 2)
WITH (id char(15),
name nvarchar(50),
country nvarchar(50) ) EXEC sp_xml_removedocument @idoc
消息 6602,级别 16,状态 2,过程 sp_xml_preparedocument,第 1 行
错误说明是 '不支持从当前编码到指定编码的切换。'。
消息 8179,级别 16,状态 5,第 11 行
找不到句柄为 0 的预定义语句。
消息 6607,级别 16,状态 3,过程 sp_xml_removedocument,第 1 行
sp_xml_removedocument: 为参数 1 提供的值无效。
'<?xml version="1.0" encoding="gb2312" ?>'
--or
<?xml version="1.0" encoding="UTF-16" ?><
DECLARE @doc nvarchar(2000)
SET @doc = '<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHotelDetail><HotelDetail><id>00101006</id>
<name>刘德华</name><country>China</country>
</HotelDetail></ArrayOfHotelDetail>'
SELECT * FROM OPENXML (@idoc, '/ArrayOfHotelDetail/HotelDetail', 2)
WITH (id char(15),
name nvarchar(50),
country nvarchar(50) )
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
EXEC sp_xml_removedocument @idoc
你这样试试
DECLARE @doc nvarchar(2000)
SET @doc = '<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHotelDetail><HotelDetail><id>00101006</id>
<name>刘德华</name><country>China</country>
</HotelDetail></ArrayOfHotelDetail>'
SELECT * FROM OPENXML (@idoc, '/ArrayOfHotelDetail/HotelDetail', 2)
WITH (id char(15),
name nvarchar(50),
country nvarchar(50) )
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
EXEC sp_xml_removedocument @idoc
你这样试试
DECLARE @doc varchar(max)
SET @doc = N'<?xml version="1.0" encoding="gb2312" ?><ROOT><ROW Num="1" /></ROOT>' --正确
SET @doc = N'<?xml version="1.0" encoding="UTF-8" ?><ROOT><ROW Num="1" /></ROOT>' --正确
SET @doc = N'<?xml version="1.0" encoding="UTF-16" ?><ROOT><ROW Num="1" /></ROOT>' --错误
...
DECLARE @doc nvarchar(max)
SET @doc = N'<?xml version="1.0" encoding="gb2312" ?><ROOT><ROW Num="1" /></ROOT>' --错误
SET @doc = N'<?xml version="1.0" encoding="UTF-8" ?><ROOT><ROW Num="1" /></ROOT>' --错误
SET @doc = N'<?xml version="1.0" encoding="UTF-16" ?><ROOT><ROW Num="1" /></ROOT>' --正确
SET @doc = N'<ArrayOfHotelDetail>
<HotelDetail>
<id>00101006</id>
<name>刘德华</name>
<country>China</country>
</HotelDetail>
</ArrayOfHotelDetail>'
SET @doc = N'<ArrayOfHotelDetail>
<HotelDetail>
<id>00101006</id>
<name>刘德华</name>
<country>China</country>
</HotelDetail>
</ArrayOfHotelDetail>'
谢谢,用你的办法可以了
DECLARE @idoc int
DECLARE @doc varchar(max)
SET @doc = N'<?xml version="1.0" encoding="gb2312" ?><ArrayOfHotelDetail><HotelDetail><id>00101006</id><name>刘德华</name><country>China</country></HotelDetail></ArrayOfHotelDetail>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc SELECT * FROM OPENXML (@idoc, '/ArrayOfHotelDetail/HotelDetail', 2)
WITH (id char(15),
name nvarchar(50),
country nvarchar(50) ) EXEC sp_xml_removedocument @idoc ---------------------
00101006 刘德华 China已经可以了,现在问题是,节点含有别的东西的时候,查询是nullSET @doc = N'<?xml version="1.0" encoding="gb2312" ?><ArrayOfHotelDetail><HotelDetail><id xmlns="http://api.elong.com/staticInfo/">00101006</id><name>刘德华</name><country>China</country></HotelDetail></ArrayOfHotelDetail>' ID的节点含有xmlns的时候,查询出来就是
-------------------------NULL 刘德华 China
这该怎么处理?我要怎么处理才能获取到00101006
谢谢