XML列-在xmlColumn.value()中使用“带有命名空间”

问题描述 投票:0回答:1

我正在尝试创建一个课程来演示名称空间。我的数据库中有一个XML列,其中包含FlighReservations根,其中包含多个FlightReservation元素。每个FlightReservation都像一个“行”,并且具有多个子元素,我希望将其显示为列。我可以在不使用名称空间的情况下使其正常工作,现在我想使用名称空间前缀来实现。

我在这里有可复制的样本:

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=608c9bf89fe6ada200216fde855557c7

这是T-SQL:

DECLARE @xmlDoc XML = 
 '<ns0:FlightReservations xmlns:ns0="http://SchemaLesson.FlightReservations">
  <ns1:FlightReservation xmlns:ns1="http://SchemaLesson.FlightReservation">
    <DepartureAirportCode>DFW</DepartureAirportCode>"
  </ns1:FlightReservation>
  <ns1:FlightReservation xmlns:ns1="http://SchemaLesson.FlightReservation">
    <DepartureAirportCode>OKC</DepartureAirportCode>"
  </ns1:FlightReservation>
  </ns0:FlightReservations>
'
;

WITH XMLNAMESPACES ('http://SchemaLesson.FlightReservations' as ns0, 
                    'http://SchemaLesson.FlightReservation' as ns1, 
                    DEFAULT 'http://SchemaLesson.FlightReservation'
                    )
select 
    t2.xmlDoc2.query('.') AS result  , 
    t2.xmlDoc2.value('(.//*[local-name()="DepartureAirportCode"])[1]','varchar(5)') AS DepartureAirportCode1, 
    t2.xmlDoc2.value('(./ns1:FlightReservation/DepartureAirportCode)[1]', 'varchar(5)') AS DepartureAirportCode2, 
    t2.xmlDoc2.value('(.//ns1:FlightReservation/DepartureAirportCode)[1]', 'varchar(5)') AS DepartureAirportCode3, 
    t2.xmlDoc2.value('(.//DepartureAirportCode)[1]', 'varchar(5)') AS DepartureAirportCode4, 
    t2.xmlDoc2.value('(.//ns1:DepartureAirportCode)[1]', 'varchar(5)') AS DepartureAirportCode5 
    from @xmlDoc.nodes('//ns1:FlightReservation')  AS t2(xmlDoc2) 

from语句似乎正在工作,因为我得到两行输出,结果列设置为此(带有一个或另一个机场代码):

<ns1:FlightReservation xmlns:ns1="http://SchemaLesson.FlightReservation">
  <DepartureAirportCode>DFW</DepartureAirportCode>"
</ns1:FlightReservation>

我能够使用XpathTester.com分别测试我的xpath:http://www.xpathtester.com/xpath/3a16744fb05e13264af788bb65210df5

SQL 2019中显示的结果是:enter image description here

唯一起作用的地方是我使用本地名称功能的地方,而我的演示的目的是使用ns1前缀。也许我有错字,但我一直盯着它看了一会儿,看不到它。 “ with名称空间”设置是否也可以在.value子句中使用?

Microsoft SQL Server 2019(RTM)-15.0.2000.5(X64)2019年9月24日13:48:23版权所有(C)Windows Server 2019 Standard 10.0(Build 17763:)上的Microsoft Corporation开发人员版(64位)] >

我正在尝试创建一个课程来演示名称空间。我的数据库中有一个XML列,其中包含FlighReservations根,其中包含多个FlightReservation元素。每个FlightReservation ...

sql-server xml tsql xquery
1个回答
1
投票

请检查下面的T-SQL。

© www.soinside.com 2019 - 2024. All rights reserved.