使用多个xml命名空间在SQL Server 2008中解析xml

时间:2014-10-09 22:44:02

标签: sql xml sql-server-2008 parsing xml-namespaces

我想从下面的xml中获取giduid。此xml作为名为xmlmsg的SQL Server 2008表中的列存在。我需要一个SQL查询来解析具有xml列的表,其中的数据如下所示:

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://api.money.com/schema/contact" Email="" 
        gId="11" uId="uadgra45678" Timestamp="2013-10-17T19:19:41Z" 
        xsi:schemaLocation="http://api.money.com/schema/contact http://api.money.com/schema/contact/contact-1.2.xsd">
</person>

1 个答案:

答案 0 :(得分:1)

(这实际上是一个评论,因为它似乎没有回答标题隐含的问题。)

此查询(来自LinqPad)创建并检索XML数据:

--Drop Table #TempXml

Create Table #TempXml(Value XML)

Insert Into #TempXml(Value)Values('<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://api.money.com/schema/contact" Email=""
        gId="11" uId="uadgra45678" Timestamp="2013-10-17T19:19:41Z"
        xsi:schemaLocation="http://api.money.com/schema/contact http://api.money.com/schema/contact/contact-1.2.xsd">
</person>')

Select count(*) from #TempXml;

Select * from #TempXml;

Select Value.value('declare namespace AMC="http://api.money.com/schema/contact";
/AMC:person[1]/@uId','varchar(max)')
,Value.value('declare namespace AMC="http://api.money.com/schema/contact";
/AMC:person[1]/@gId','int')
From #TempXml;

Drop Table #TempXml