如何使用 expath 和 Xquery 获取 CSV 文件?

how to use expath and Xquery to fetch a CSV file?

这个 example of expath 如何适应直接从网站抓取 和存储 CSV 文件?

xquery version "3.1";

import module namespace hc = "http://expath.org/ns/http-client";

let $url := "https://www.kingjamesbibleonline.org/Genesis-Chapter-1_Original-1611-KJV/"
let $request := 
    <hc:request href="{$url}" method="GET">
        <hc:header name="Connection" value="close"/>    
    </hc:request>
return
    hc:send-request($request)

正在浏览:

http://www.bccdc.ca/health-info/diseases-conditions/covid-19/data

具体的CSV文件为:

http://www.bccdc.ca/Health-Info-Site/Documents/BCCDC_COVID19_Dashboard_Case_Details.csv

当然,有多种方法可以获取该文件。但是,如何用上面的 xquery 来完成呢?

显然,更改 URL 是起点,这确实会导致控制台打印一个大的 CSV 文件。

正如@MartinHonnen 已经指出的那样,BaseX 有一个 CSV 模块。

这里是使用方法。

csv 文件addressbook.csv

FName, LName, Address, City
John, Doe, 3851 SW 52nd St., Miami
Mary, Dowson, 770 SE 21nd St., Orlando

XQuery

let $text := file:read-text("c:\Users\Yitzhak\Downloads\addressbook.csv")
return csv:parse($text, map { 'header': true() })

输出

<csv>
  <record>
    <FName>John</FName>
    <LName> Doe</LName>
    <Address> 3851 SW 52nd St.</Address>
    <City> Miami</City>
  </record>
  <record>
    <FName>Mary</FName>
    <LName> Dowson</LName>
    <Address> 770 SE 21nd St.</Address>
    <City> Orlando</City>
  </record>
</csv>