【发布时间】:2020-06-11 00:27:09
【问题描述】:
我正在尝试创建一个课程来演示命名空间。 我的数据库中有一个 XML 列,其中包含一个 FlyReservations 根,以及多个 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
唯一有效的地方是我使用了 local-name 函数,而我的演示的目的是使用 ns1 前缀。也许我有一个错字,但我一直盯着它并尝试了一段时间,但看不到它。 “with namespace”设置是否也适用于 .value 子句?
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) Sep 24 2019 13:48:23 版权所有 (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2019 Standard 10.0 (Build 17763: )
【问题讨论】:
-
请分享所需的输出。 DepartureAirportCode1 - DepartureAirportCode5 有什么区别?
标签: sql-server xml tsql xquery