加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

文章标题

发布时间:2020-12-16 00:04:06 所属栏目:百科 来源:网络整理
导读:13.3.2 提取地区代码 我们下载函数的输出结果是字符串,因此,需要将字符串解析为 XML 文档。由于这个操作经常要用,所以,我们要写一个简单的包装函数,用 worldBankDownload 下载数据,把返回结果转换成 XDocument 对象。下载操作异步运行,因此,我们使用

13.3.2 提取地区代码

我们下载函数的输出结果是字符串,因此,需要将字符串解析为 XML 文档。由于这个操作经常要用,所以,我们要写一个简单的包装函数,用 worldBankDownload 下载数据,把返回结果转换成 XDocument 对象。下载操作异步运行,因此,我们使用异步工作流实现这个函数:

let worldBankRequest(props) = async {
  let! text = worldBankDownload(props)
  return XDocument.Parse(text) }

代码首先使用 let! 执用异步下载;完成之后,把 XML 数据解析成 XDocument 对象返回。用 Async.RunSynchronously 下载之后,就可以使用上一节的辅助函数,查询返回的 XML 文档。清单 13.9 的示例,首先下载了有关国家的汇总信息,然后访问一些值,稍后会用到。

清单 13.9 浏览地区信息(交互式 F#)

> let doc =
    worldBankRequest(["countries"],["region","NA"])
    |> Async.RunSynchronously;;
val doc : XDocument = (...)

> let c = doc |> xnested ["countries"; "country" ];;    [1]
val c : XElement

> c |> xattr "id";;                [2]
val it : string = "EAP"

> c |> xelem "name" |> xvalue;;    [3]
val it : string = "East Asia & Pacific"

我们首先访问返回文档中的第一个 country 元素,它是根元素 countries 的子元素。遍历 XML 树,我们使用 xnested 函数[1],指定要选择元素的路径。
现在,我们可以看一下元素的内容,准备好提取哪些信息。首先,我们演示如何获取地区 ID,它保存在 id 特性中,因此,我们使用 xattr 函数读取[2];我们还需要地区的名字,用更友好的格式显示数据,这个值在 name 元素中。
浏览了结构以后,我们知道如何访问一个地区的所有需要的信息,然后,再遍历所有地区。清单 13.10 使用了同样的函数,但用在序列计算中。

清单 13.10 创建地区信息的序列 (交互式 F#)

> let regions =
    seq { let countries = doc |> xnested [ "rsp"; "countries" ]
            for country in countries |> xelems "country" do    [1]
              yield country |> xelem "name" |> xvalue };;      [2]
val regions : seq<string * string> = seq
[ ("East Asia & Pacific";
("Europe & Central Asia";
("European Monetary Union";
("Heavily indebted poor countries (HIPC)"; ...]

与前面的清单相比,有一个重要改变,现在能够处理数据中所有的 country 节点了。我们使用 xelems 函数[1],用 for 循环访问序列中的元素;因为使用了序列表达式,所以,结果元素可以由 yield 关键字生成。为了使国家的名字更友好地显示,我们部分使用了在清单 13.9 中尝试过的代码,以元素序列的形式返回 [2]。 在本节,我们已经知道如何得到地区信息的列表,为进一步研究使用。重要的不是这些代码,而在于更一般的处理过程。创建辅助函数数据访问,以交互方式提取信息,了解文档结构,然后,把这些代码包装成函数。下一步,我们将下载需要的指标,比如,地区的森林覆盖情况。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读