3

我从名为 MDM 的金融数据提供商处收到了一个 XML 文件。它显示了我下载了哪些股息。它包括股息率、日期和要求的证券等信息。

我尝试使用 XML 源和 Merge Join 使用 SSIS 解析它。我还尝试了使用 Open XML 的 SQL Server 2012,但无法做到。我从 Youtube、谷歌和搜索这个板中收集了这些技术。我的目标是使其采用易于阅读的表格格式,以便我可以查看哪些证券收到了股息信息。

当我尝试使用 SSIS 解析它时,给出了以下输出名称

FIELD
SECURITY
APP_PARAM
MDM_MESSAGE

XML 文件太大,无法在此处完整发布,但我提供了一个希望有效的 Dropbox 链接。希望有人可以提供帮助。我不确定这个文件是否可以解析,尽管 XML 可以被解析。

https://dl.dropboxusercontent.com/u/29851290/parse_file.xml

理想情况下,输出将是这样的。

SYM_TYPE_ID   SEC_SYMBOL  SEC_TYPE_ID FOR DATE    EX_DT    PAY_DT     WASH_AMOUNT      RATE TICKER           
aapl          csus        (Not sure)  5/15/2013   6/1/2013 (Not Sure)    0.25
4

1 回答 1

3

试试这个——

DECLARE @XML XML
SELECT @XML = CONVERT (XML, [BulkColumn])
FROM OPENROWSET (BULK N'C:\parse_file.xml', SINGLE_BLOB) [XmlData]

SELECT PROV_ID = t.c.value('../@PROV_ID', 'VARCHAR(25)') 
     , SYM_TYPE_ID = t.c.value('../@SYM_TYPE_ID', 'VARCHAR(25)')
     , SEC_SYMBOL = t.c.value('../@SEC_SYMBOL', 'VARCHAR(25)')
     , SEC_TYPE_ID = t.c.value('../@SEC_TYPE_ID', 'VARCHAR(25)')
     , LOCAL_NAME = t.c.value('@LOCAL_NAME', 'VARCHAR(25)')
     , FOR_DATE = t.c.value('@FOR_DATE', 'DATETIME')
     , FIELD = t.c.value('.', 'VARCHAR(25)')
FROM @XML.nodes('root/MDM_MESSAGE[2]/SECURITY/FIELD') t(c)
WHERE t.c.value('@SEC_SYMBOL', 'VARCHAR(25)') = '57636Q104'

UNION ALL

SELECT PROV_ID = t.c.value('@PROV_ID', 'VARCHAR(25)') 
     , SYM_TYPE_ID = t.c.value('@SYM_TYPE_ID', 'VARCHAR(25)')
     , SEC_SYMBOL = t.c.value('@SEC_SYMBOL', 'VARCHAR(25)')
     , SEC_TYPE_ID = t.c.value('@SEC_TYPE_ID', 'VARCHAR(25)')
     , LOCAL_NAME = NULL
     , FOR_DATE = NULL
     , FIELD = NULL
FROM @XML.nodes('root/MDM_MESSAGE[2]/SECURITY') t(c)
WHERE t.c.exist('FIELD') = 0
     AND t.c.value('@SEC_SYMBOL', 'VARCHAR(25)') = '57636Q104'
于 2013-06-20T05:45:25.130 回答