You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQL导入XML中GivenName字段失败,疑XMLNameSpaces配置有误

问题修复说明

你遇到的问题主要由两处错误导致:

  • 命名空间声明错误:你的原代码仅声明了一个默认命名空间,但XML存在两层不同的默认命名空间:根节点<Envelope>及<Body>属于http://www.w3.org/2003/05/soap-envelope,<OTA_Example>及其下级节点属于http://www.opentravel.org/OTA/2003/05,无法共用同一个默认命名空间,需要分别声明前缀区分。
  • 取值逻辑错误:你在value方法中用@GivenName是取节点属性,但示例XML中GivenName是<PersonName>的子元素,不是属性;同时路径层级匹配错误,T2返回的是<ResUser2>节点,下级直接对应<Profiles>,不需要在路径开头重复写Profiles[1]。

修正后可正常运行的SQL代码

DECLARE @xml XML = (SELECT [Xml] FROM ExampleTable)

;WITH XMLNAMESPACES (
    'http://www.w3.org/2003/05/soap-envelope' AS soap,
    DEFAULT 'http://www.opentravel.org/OTA/2003/05'
)
SELECT 
    FirstName = ProfileInfo.value('(Profiles/ProfileInfo/Profile/Customer/PersonName/GivenName)[1]', 'nvarchar(255)')
FROM @xml.nodes('soap:Envelope/soap:Body/OTA_Example/Info/Infos/ResUser') as T1(ResUserNode)
OUTER APPLY T1.ResUserNode.nodes('ResUser2') as T2(ProfileInfo)

运行后可正确获取到GivenName的值FirstnameTest。


内容的提问来源于stack exchange,提问作者BrianF.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:48:00