【问题标题】:How to get data from XML Column that contain xml namespace (SQL Server 2005)如何从包含 xml 命名空间的 XML 列中获取数据 (SQL Server 2005)
【发布时间】:2015-11-19 00:31:03
【问题描述】:

我用谷歌搜索了很多,但没有运气。 我无法使用 sp_OAGetProperty 从来自 Web 服务的 XML 列中检索数据。

XML 列包含..

<ArrayOfCustomerInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
   <Customer CustCode="001">
      <CustName>John</CustName>
      <Queues>
         <Q>
            <No>10</No>
            <Line>1</Line>
         </Q>
      </Queues>
   </Customer> 
</ArrayOfCustomerInfo>

当我执行以下语句时,我得到了 NULL

(但如果我删除所有 XML 命名空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3. org/2001/XMLSchema" xmlns="http://tempuri.org/")

SELECT a.b.value('@CustCode','varchar(4)') AS Code
   ,a.b.value('CustName[1]','varchar(20)') AS Name
   ,c.d.value('No[1]','int') AS QNo
   ,c.d.value('(Line)[1]','int') AS QLine
FROM  PGHRMS_Employees x
CROSS APPLY x.data.nodes('/ArrayOfCustomerInfo/Customer') AS a(b)
CROSS APPLY a.b.nodes('Queues/Q') AS c(d)

请给我一些建议。我必须用 SQL SERVER 来实现 :(

如果有人想复制它,我将脚本粘贴到:http://pastebin.com/ueZGidyL

提前谢谢你!!!

【问题讨论】:

    标签: sql-server xml web-services


    【解决方案1】:

    试试这个:

    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/')
    SELECT
        Code = XC1.value('@CustCode', 'varchar(4)'),
        Name = XC1.value('CustName[1]', 'varchar(20)'),
        QNo = XC2.value('No[1]', 'int') ,
        QLine = XC2.value('(Line)[1]','int') 
    FROM
        PGHRMS_Employees 
    CROSS APPLY
        XmlContent.nodes('/ArrayOfCustomerInfo/Customer') AS XT1(XC1)
    CROSS APPLY 
        XC1.nodes('Queues/Q') AS XT2(XC2)
    

    使用 WITH XMLNAMESPACES 构造,您可以定义一些 XML 命名空间以供以下 T-SQL 语句使用 - 默认命名空间或前缀命名空间等。

    【讨论】:

    • 谢谢marc_s,我正在寻找这个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2013-05-15
    相关资源
    最近更新 更多