-
Notifications
You must be signed in to change notification settings - Fork 0
/
vietnam-wdi.r
43 lines (31 loc) · 1.12 KB
/
vietnam-wdi.r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
require(here)
require(tictoc)
extract_record = function(path) {
withr::local_package(package = "XML")
stopifnot(
"`path` does not exist." = file.exists(path)
)
doc = xmlInternalTreeParse(path)
## define xpath queries
country_area_xp = "//field[@name='Country or Area']"
country_key_xp = "//field[@name='Country or Area']/@key"
item_xp = "//field[@name='Item']"
item_key_xp = "//field[@name='Item']/@key"
year_xp = "//field[@name='Year']"
value_xp = "//field[@name='Value']"
## pull data out of the document
out = data.frame(
country_area = xpathSApply(doc, country_area_xp, xmlValue),
country_key = xpathSApply(doc, country_key_xp),
item = xpathSApply(doc, item_xp, xmlValue),
item_key = xpathSApply(doc, item_key_xp),
year = as.integer(xpathSApply(doc, year_xp, xmlValue)),
value = as.numeric(xpathSApply(doc, value_xp, xmlValue))
)
out
}
tic()
res = extract_record(here("API_VNM_DS2_en_xml_v2_990115.xml"))
toc()
## 5.457 sec elapsed
## write.csv(res, file = here("vietnam-wdi.csv"), quote = FALSE, row.names = FALSE)