在过去的4个小时里,我尝试通过R访问xml文件中的一些值而没有任何运气,现在我对于新想法都是空的。
这是xml文件:http://opcom.ro/order_book/OBK-30XROOPCOM-----C-2016-08-19.xml
我试图在// OrderTimeSeries // SupplyCurve // Period // Interval // Point中获取所有Qty值,以便第一个条目为0,下一个条目为0,然后是23,依此类推。
我尝过这样的话:
library(XML)
doc <- xmlParse("http://opcom.ro/order_book/OBK-30XROOPCOM-----C-2016-08-19.xml")
qty <- unlist(xpathApply(doc,"//OrderTimeSeries//SupplyCurve//Period//Interval//Point",xmlvalue))
我认为如果xml写成
,这将有效<Qty>"0.00000000000"<Qty/>
但我不知道如何在&lt;&gt;内写出值。 v = 0,00000000000。
答案 0 :(得分:0)
每个<Pos="##"/>
个记录中都有一个节点<Interval>
。我怀疑这些重要数据能够以不同的方式识别每个时间序列,并且你只是把它扔掉了那个粗略的选择器。
您可以直接解决问题:
Pos
Point
Point
并在此过程中构建data.frame
:
library(xml2)
library(purrr)
doc <- read_xml("http://opcom.ro/order_book/OBK-30XROOPCOM-----C-2016-08-19.xml")
names_and_values <- function(x) {
names <- xml_name(xml_find_all(x, ".//*"))
vals <- as.numeric(xml_attr(xml_find_all(x, ".//*"), "v"))
df <- rbind.data.frame(vals)
setNames(df, names)
}
pos_and_points <- function(x) {
pos <- as.numeric(xml_attr(xml_find_first(x, ".//Pos"), "v"))
xml_find_all(x, ".//Point") %>%
map_df(names_and_values) -> df
df$pos <- pos
df
}
xml_find_all(doc, ".//OrderTimeSeries/SupplyCurve/Period/Interval") %>%
map_df(pos_and_points) -> df
dplyr::glimpse(df)
## Observations: 5,316
## Variables: 4
## $ Qty <dbl> 0.0, 0.0, 23.0, 23.0, 26.5, 26.5, 56.8, 56.8, 150.5, 150.5, 171.5, 171....
## $ PriceAmount <dbl> -5.000000e+02, -2.500000e+01, -2.500000e+01, -2.235536e+01, -2.235536e+...
## $ SeqNr <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
## $ pos <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...