【问题标题】:Parsing XML with namespaces in SQL Server在 SQL Server 中使用命名空间解析 XML
【发布时间】:2013-08-12 16:25:39
【问题描述】:

我很难解析定义了一些命名空间的 XML:

<TravelItineraryReadRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="2.2.0">    
<TravelItinerary xmlns="http://webservices.sabre.com/sabreXML/2011/10">
<CustomerInfo>          
<PersonName WithInfant="false" NameNumber="01.01" RPH="1">              
<GivenName>JEFF S</GivenName>"

XMl 存储在名为 response 的 XML 类型列中,我想获取 GivenName 值,为此我使用以下查询:

;WITH XMLNAMESPACES (DEFAULT 'http://webservices.sabre.com/sabreXML/2011/10')
select 
response.value('(/TravelItineraryReadRS/TravelItinerary/CustomerInfo/PersonName[1]/GivenName)[1]', 'nvarchar(50)') AS Name
from dbo.RezMonitorXMLdataTest where locator = 'GUBXRV'

但结果不是得到 JEFF S,而是得到 NULL。我认为这可能与使用的命名空间有关。有谁知道我如何获得 GivenName 值?

提前致谢,

古兹曼

【问题讨论】:

    标签: sql xquery-sql


    【解决方案1】:

    由于您的 顶级 节点 &lt;TravelItineraryReadRS&gt; 不是该 XML 命名空间的 部分,因此您不能使用 DEFAULT 限定符。相反,您必须定义一个 XML 名称空间前缀,并将其包含在您的 XQuery 中:

    ;WITH XMLNAMESPACES ('http://webservices.sabre.com/sabreXML/2011/10' AS ns)
    SELECT
        XmLContent.value('(/TravelItineraryReadRS/ns:TravelItinerary/ns:CustomerInfo/ns:PersonName[1]/ns:GivenName)[1]', 'nvarchar(50)') AS Name
    FROM 
        dbo.RezMonitorXMLdataTest 
    WHERE
        locator = 'GUBXRV'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      相关资源
      最近更新 更多