【问题标题】:Get an XML from WEB with a SQL DB2 on Iseries使用 Iseries 上的 SQL DB2 从 WEB 获取 XML
【发布时间】:2021-11-16 23:49:47
【问题描述】:

我必须下载此页面中生成的 XML:

https://www.backend-rates.ezv.admin.ch/api/xmldaily?d=20210923&locale=it

唯一的参数是 YYYYMMDD 格式的日期。

我知道有一些 SQL 函数可以做到这一点,但我不知道如何解决这个问题。

编辑: 我试试这个:

           SELECT * FROM XMLTABLE(
  XMLNAMESPACES (DEFAULT 'https://www.backend-rates.ezv.admin.ch/xmldaily',
  'https://www.backend-rates.ezv.admin.ch/api/xmldaily?d=20210922&locale=it' AS "doc" ) ,
  'doc/wechselkurse/devise' PASSING XMLPARSE 
  ( DOCUMENT SYSTOOLS.HTTPGETBLOB                                                                                      
  ('https://www.backend-rates.ezv.admin.ch/dailyrates.xsd' 
        , ''))  
  COLUMNS 
  code Char(3) PATH 'code',
  waehrung char(10) PATH 'waehrung' ,
  kurs decfloat PATH 'kurz'
)
where code = 'USD'

但是我得到一个空结果,你能帮我找出错误吗?

【问题讨论】:

    标签: sql xml get ibm-midrange db2-400


    【解决方案1】:

    多个问题,列在查询下方,因为它们在不在下方时会破坏格式

    SELECT * from
        XMLTABLE(
            XMLNAMESPACES (DEFAULT 'https://www.backend-rates.ezv.admin.ch/xmldaily'),
           '$doc/wechselkurse/devise'
            PASSING XMLPARSE 
                (DOCUMENT SYSTOOLS.HTTPGETCLOB('https://www.backend-rates.ezv.admin.ch/api/xmldaily?d=20210922&locale=it', '')) as "doc" 
      COLUMNS 
      code Char(3) PATH '@code',
      waehrung char(10) PATH 'waehrung' ,
      kurs decfloat PATH 'kurs'
    )
    where code = 'usd'
    
    • 您不需要将文档添加到命名空间,因为它不是命名空间
    • 您下载和解析的不是文档,而是可以验证它的架构
    • 您必须在 xpath 表达式中为您的文档命名,即使用 as 'doc'(而不是像我之前的回答中那样使用 '$doc')
    • 您可以在 xpath 表达式中将该名称称为 $doc
    • code 是一个属性,你可以使用@code 获取它的值
    • code 值是小写的

    【讨论】:

    • http_get() 是全新的,可能 OP 可能需要使用旧的 systools.httpGetclob()
    • 感谢您的帮助...我用新信息编辑了我的问题
    • @Charles 看起来你是对的
    • 完美!!!谢谢大家
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多