XMLTABLE函数查询XML数据无返回结果,命名空间配置问题求助
问题原因
- 命名空间配置不全,未覆盖XML中所有节点所属的命名空间:
- 根节点
ARSoapOut属于http://schemas.xmlsoap.org/soap/envelope/命名空间,未在你的命名空间声明中配置,路径匹配第一步就失败 ARResponse、ARResult、diffgram三个节点属于你配置的默认命名空间http://company.com/path,这部分匹配逻辑是正确的NewDataSet节点显式声明了xmlns="",代表该节点及其子节点属于无命名空间,和你配置的默认命名空间不匹配,后半段路径也无法命中
- 根节点
- 路径未对应绑定命名空间前缀,导致节点匹配完全失效
修复后的查询语句
XML_TABLE = SELECT * FROM XMLTABLE ( XMLNAMESPACES( 'http://schemas.xmlsoap.org/soap/envelope/' AS "soap", DEFAULT 'http://company.com/path', '' AS "none" -- 绑定空命名空间前缀,匹配NewDataSet及其子节点 ), '/soap:ARSoapOut/ARResponse/ARResult/diffgram/none:NewDataSet/none:FinAccountsReceivable' PASSING XML_VALUE COLUMNS SiteID NVARCHAR(5) PATH 'normalize-space(none:SiteID)', -- normalize-space用于去除节点值自带的换行、前后多余空白 UnitName NVARCHAR(2) PATH 'normalize-space(none:UnitName)', Tenant NVARCHAR(50) PATH 'normalize-space(none:Tenant)', Company NVARCHAR(20) PATH 'normalize-space(none:Company)', Balance DECIMAL(13,2) PATH 'none:Balance' );
内容的提问来源于stack exchange,提问作者telo04
相关产品推荐
相关产品推荐

