【发布时间】:2019-01-31 00:44:23
【问题描述】:
我在使用 OPENXML 解析具有两个嵌套 xmlns 命名空间(两者相同)的 XML 文件时遇到问题。
我已经阅读了很多东西,包括this topic on stackexchange,但这对我的情况没有帮助。下面我粘贴了一些 XML 代码(抱歉,所有字段都是波兰语,因为它是来自银行 Web 服务的响应)。如果我选择 DaneZapytaniaFin 对象
;WITH XMLNAMESPACES(DEFAULT 'http://bik.pl/cc/big')
SELECT * FROM OPENXML(@idoc, '/BIGIMResponse/DaneZapytaniaFin')
我得到了其中的所有值。
但是当我试图获得例如。名称字段
;WITH XMLNAMESPACES(DEFAULT 'http://bik.pl/cc/big')
SELECT * FROM OPENXML(@idoc, '/BIGIMResponse/DaneZapytaniaFin/dane-id-kons/imie')
只有我得到的是空值。
当我试图获取它的父节点时也是如此,dane-id-kons
;WITH XMLNAMESPACES(DEFAULT 'http://bik.pl/cc/big')
SELECT * FROM OPENXML(@idoc, '/BIGIMResponse/DaneZapytaniaFin/dane-id-kons')
它是空的。
有人可以给我一些建议如何获得这些值吗?提前致谢!
我的 XML 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<BIGIMResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DaneZapytaniaFin>
<forma-pr-podm forma-pr-podm="01" xmlns="http://bik.pl/cc/big" />
<dane-id-kons form-przek-nazw-i-im="01" imie="NAME" nazw="SURNAME" pesel="1234567890" rodz-dok-tozs="ID" seria-nr-dok-tozs="ABC123456" obywatelstwo="PL" xmlns="http://bik.pl/cc/big" />
<daty-upow data-up-15-1="2019-11-22T00:00:00" data-up-24-1="2019-11-22T00:00:00" data-up-bik="2019-11-22T00:00:00" data-up-zbp="2019-11-22T00:00:00" xmlns="http://bik.pl/cc/big" />
</DaneZapytaniaFin>
</BIGIMResponse>
我直接从文件路径读取它:
create table #p_TempDM (dane xml)
declare @idoc INT
declare @sql varchar(max)
set @sql = '
insert into #p_TempDM select CONVERT(xml, bulkcolumn, 2) imp from
openrowset (bulk '''+@filePath+''', single_blob) as dane
'
exec (@sql)
declare @x xml
select @x = dane from #p_TempDM
EXEC sp_xml_preparedocument
@idoc OUTPUT,
@x;
【问题讨论】: