【发布时间】:2017-10-09 22:19:00
【问题描述】:
我正在尝试从以下网页导入 XML 数据:http://www.tcmb.gov.tr/kurlar/today.xml。这是一个不断更新的网页,我希望我的 SQL 代码能够获取最新的值。
如果我手动将 xml 文件下载到我的计算机并运行我的 SQL 代码,它可以正常工作:
DECLARE @xmlFile XML
SET @xmlFile = (SELECT * FROM OPENROWSET(BULK 'C:\Users\sqlfreaq\Desktop\today.xml', SINGLE_CLOB) AS xmldata)
SELECT @xmlFile.value('(Tarih_Date/Currency/ForexSelling)[1]', 'decimal(18,5)') AS DatabaseID
但是,当我尝试使用 OLE 存储过程导入数据时,某些 Unicode 字符会发生变化,因此无法解析 XML。我的代码如下:
DECLARE @url VARCHAR(300),
@win INT,
@hr INT,
@xml xml
SET @url = 'http://www.tcmb.gov.tr/kurlar/today.xml'
EXEC @hr = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @win OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr = sp_OAMethod @win, 'Open', NULL, 'GET', @url, 'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr = sp_OAMethod @win, 'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
Create table #tmp(dt nvarchar(max))
insert into #tmp exec @hr =sp_OAGetProperty @win, 'ResponseText'
Select
CAST(CAST([dt] AS VARCHAR(MAX)) AS XML) TT
from #tmp -- single column/single row.
Drop Table #tmp -- clean up
EXEC @hr = sp_OADestroy @win
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
但是,如果我使用此代码从 NON-UNICODE xml 文件中获取数据(只需将代码中的网站从 http://www.tcmb.gov.tr/kurlar/today.xml 更改为 http://www.bnr.ro/nbrfxrates.xml,它就可以工作。如何,我可以修改我的代码或方法,这样我就可以使用在线的 XML 文件了。
非常感谢!
【问题讨论】:
标签: sql-server xml xml-parsing sqlxml