【发布时间】:2020-06-05 11:03:14
【问题描述】:
我正在尝试读取具有以下架构的物理 xml 文件
<Document>
<CstmrDrctDbtInitn>
<PmtInf>
<DrctDbtTxInf>
<InstdAmt Ccy="EUR">1</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>umr</MndtId>
<DtOfSgntr>2020-04-07</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>Akings</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>123456789132456789523</IBAN>
</Id>
</DbtrAcct>
</DrctDbtTxInf>
</PmtInf>
</CstmrDrctDbtInitn>
</Document>
通过使用以下查询:
DECLARE @xml XML
SELECT @xml = BulkColumn
FROM OPENROWSET(BULK 'E:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLELEMOS\MSSQL\Backup\test.xml', SINGLE_BLOB) x
SELECT
t.c.query('InstdAmt').value('.', 'NVARCHAR(50)'),
t.c.query('Dbtr/Nm').value('.', 'NVARCHAR(50)')
FROM @xml.nodes('*:Document/*:CstmrDrctDbtInitn/*:PmtInf/*:DrctDbtTxInf') t(c)
但是每次运行它时我都会得到空白结果,知道我在这里可能缺少什么吗?
【问题讨论】:
-
XML 的根节点是
Dcoument,但您在查询中指定了Document。将 XML 或查询更改为一致。 -
其实我改了还是空白
-
我在将元素名称更改为
Dcoument后运行了您的查询,它返回“1 Akings”。 -
你的真实 XML 中有命名空间吗?
-
是的,有命名空间,我需要在其他地方声明吗?
标签: sql-server xml tsql openrowset