TSQL-openxml解码具有编码值的xml元素
如果XML元素值碰巧被编码,有没有办法阻止SQLServer2008对其进行解码 例如,我有以下查询:TSQL-openxml解码具有编码值的xml元素,xml,sql-server-2008,tsql,Xml,Sql Server 2008,Tsql,如果XML元素值碰巧被编码,有没有办法阻止SQLServer2008对其进行解码 例如,我有以下查询: declare @T nvarchar(max) SET @T = '<node><val><?xml version="1.0" encoding="UTF-8"?></val></node>' declare @doc nvarchar(ma
declare @T nvarchar(max)
SET @T = '<node><val><?xml version="1.0" encoding="UTF-8"?></val></node>'
declare @doc nvarchar(max), @idoc int
SET @doc = @T
exec sp_xml_preparedocument @idoc output, @doc;
select * from openxml (@idoc, '//*')
exec sp_xml_removedocument @idoc;
这是正确的行为。通过使用诸如
之类的实体,您只需对这些值进行编码以存储在XML节点中。您正在存储您可以使用XML数据类型并将query()
的结果强制转换为nvarchar(max)
declare@xxml
设置@X=”?xml version=“1.0”encoding=“UTF-8”?'
选择cast(@X.query('/node/val/text()')作为nvarchar(max))
结果
?xml version=“1.0”encoding=“UTF-8”?
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
declare @T nvarchar(max)
SET @T = '<node><val>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</val></node>'
declare @doc nvarchar(max), @idoc int
SET @doc = @T
exec sp_xml_preparedocument @idoc output, @doc;
select * from openxml (@idoc, '//*')
exec sp_xml_removedocument @idoc;
declare @T nvarchar(max)
SET @T = '<node><val><![CDATA[<?xml version="1.0" encoding="UTF-8"?>]]></val></node>'
declare @doc nvarchar(max), @idoc int
SET @doc = @T
exec sp_xml_preparedocument @idoc output, @doc;
select * from openxml (@idoc, '//*')
exec sp_xml_removedocument @idoc;