<?xml version="1.0" encoding="UTF-8" ?>
<response>
<status>0</status>
<desc>success</desc>
<content>
<field name="测试名" type="string">测试内容值</field>
</content>
</response>
请达人使用储存过程 解析出如上xml中field 字段的"测试内从值"
在网上找了一段代码,不支持xml中包含任何中文字符.附在网上找的代码
DECLARE @HDOC INT --文档句柄
DECLARE @XMLSTRING VARCHAR(200) --XML字符串
SET @xmlString ='<?xml version="1.0"?>
<ROOT>
<USER ID="1" Name="SBQCEL"/>
<USER ID="2" Name="PEACELI"/>
<USER ID="3" Name="SHEEPCHANG"/>
</ROOT>'
--使用系统存储过程SP_XML_PREPAREDOCUMENT分析XML字符串
EXEC SP_XML_PREPAREDOCUMENT @HDOC OUTPUT, @xmlString
--使用OPENXML从SQL Server 的内部缓存查询数据
SELECT * FROM OPENXML(@HDOC,N'/ROOT/USER')
WITH
(
ID INT,
Name VARCHAR(10)
)
--使用系统存储过程SP_XML_REMOVEDOCUMENT释放内存
EXEC SP_XML_REMOVEDOCUMENT @HDOC
<response>
<status>0</status>
<desc>success</desc>
<content>
<field name="测试名" type="string">测试内容值</field>
</content>
</response>
请达人使用储存过程 解析出如上xml中field 字段的"测试内从值"
在网上找了一段代码,不支持xml中包含任何中文字符.附在网上找的代码
DECLARE @HDOC INT --文档句柄
DECLARE @XMLSTRING VARCHAR(200) --XML字符串
SET @xmlString ='<?xml version="1.0"?>
<ROOT>
<USER ID="1" Name="SBQCEL"/>
<USER ID="2" Name="PEACELI"/>
<USER ID="3" Name="SHEEPCHANG"/>
</ROOT>'
--使用系统存储过程SP_XML_PREPAREDOCUMENT分析XML字符串
EXEC SP_XML_PREPAREDOCUMENT @HDOC OUTPUT, @xmlString
--使用OPENXML从SQL Server 的内部缓存查询数据
SELECT * FROM OPENXML(@HDOC,N'/ROOT/USER')
WITH
(
ID INT,
Name VARCHAR(10)
)
--使用系统存储过程SP_XML_REMOVEDOCUMENT释放内存
EXEC SP_XML_REMOVEDOCUMENT @HDOC
http://topic.csdn.net/u/20081107/17/68aaf5a9-c596-4ab5-ae18-f3370b2ab35b.html
关键是你xml代码的encoding部分,应该是GB2312,不应该是UTF-8.
原因是你在ms studio中的编辑器默认编码 应该是GB2312,所以你的xml代码字符串的内部编码是GB2312,但在xml相关的存储过程 和 xml类型的方法中却是按照你的xml代码的头部encodeing提示UTF-8去处理,就出错了。
我想,如果你的xml代码字符串是通过实际的utf-8编码的xml文档读入的话,应该不会出现问题!declare @xml xml
set @xml='<?xml version="1.0" encoding="GB2312" ?> <response> <status>0</status> <desc>success</desc> <content> <field name="测试名" type="string">测试内容值</field> </content> </response>'
select @xml.value('(/response/content/field)[1]','nvarchar(50)')
select @x='<?xml version="1.0" encoding="gbk"?>
<response>
<status>0</status>
<desc>success</desc>
<content>
<field name="test" type="string">测试内容值</field>
</content>
</response>'
select CAST(@x.query('./response/content/field/text()') AS VARCHAR(10))
/*----------
测试内容值(1 行受影响)
*/
别用utf-8
SET @xml = '<?xml version="1.0" encoding="UTF-8" ?>
<response>
<status>0</status>
<desc>success</desc>
<content>
<field name="测试名" type="string">测试内容值</field>
</content>
</response>'SELECT @xml.value('/response[1]/content[1]/field[1]','varchar(20)') AS field