2

我很难解析定义了一些命名空间的 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 值?

提前致谢,

古兹曼

4

1 回答 1

3

由于您的顶级节点<TravelItineraryReadRS>不是该 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'
于 2013-08-12T18:35:07.343 回答