R:无法从XML访问/提取值

时间:2016-08-31 12:55:40

标签: r xml import

在过去的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。

1 个答案:

答案 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,...