我有一个XML文件,其节点具有相同的名称,我无法找到如何选择我想要的数据来创建数据帧。我是R和XML的新手,我似乎无法使其发挥作用!
我的XML看起来像这样(只是开头):
<GL_Document xmlns="">
<time_Period.timeInterval>...</time_Period.timeInterval>
<TimeSeries>
<mRID>1</mRID>
<MktPSRType>
<psrType>ProdType1</psrType>
</MktPSRType>
<Period>
<timeInterval>
<start>2015-12</start>
<end>2016-11</end>
</timeInterval>
<resolution>PT60M</resolution>
<Point>
<position>1</position>
<quantity>9</quantity>
</Point>
<Point>
<position>2</position>
<quantity>7</quantity>
</Point>
<Point>
<position>3</position>
<quantity>9</quantity>
</Point>
代码包含名为&#34; TimeSeries&#34;的不同节点。使用相同类型的数据(此处不开发Period以查看整个结构)
<GL_Document xmlns="">
<time_Period.timeInterval>...</time_Period.timeInterval>
<TimeSeries>
<mRID>1</mRID>
<MktPSRType>
<psrType>ProdType1</psrType>
</MktPSRType>
<Period>...</Period>
</TimeSeries>
<TimeSeries>
<mRID>2</mRID>
<MktPSRType>
<psrType>ProdType2</psrType>
</MktPSRType>
<Period>...</Period>
</TimeSeries>
<TimeSeries>...</TimeSeries>
<TimeSeries>...</TimeSeries>
<TimeSeries>...</TimeSeries>
<TimeSeries>...</TimeSeries>
<TimeSeries>...</TimeSeries>
</GL_Document>
我想以下列格式获取数据:
psrType position quantity
ProdType1 1 9
... ... ...
ProdType2 1 ...
我尝试应用此帖中提到的解决方案:How to parse XML to R data frame 但没有成功。 我的代码看起来像这样,但我得到的数据帧不包含数据:
xml.url3<-getURL(xml.file3)
doc<-xmlParse(xml.url3)
position_path<-"//GL_Document/TimeSeries/Period/Point/position"
quantity_path<-"//GL_Document/TimerSeries/Period/Point/quantity"
df<-data.frame(
pos=as.integer(sapply(doc[position_path],as,"integer")),
quant=as.integer(sapply(doc[quantity_path],as,"integer")))
非常感谢你的帮助!
答案 0 :(得分:1)
考虑使用XML xpathSApply()
来运行直接的XPath表达式。对于 psrType 值,请使用ancestor::*
data.frame()
将每个<TimeSeries>
的一个值映射到 period 和量:
library(XML)
xml.url3 <- getURL(xml.file3)
doc <- xmlParse(xml.url3)
period <- xpathSApply(doc, "//Point/position", xmlValue)
quantity <- xpathSApply(doc, "//Point/quantity", xmlValue)
psrType <- xpathSApply(doc, "//Point/ancestor::TimeSeries/MktPSRType/psrType", xmlValue)
df <- data.frame(psrType = psrType,
period = as.integer(period),
quantity = as.integer(quantity))
df
# psrType period quantity
# 1 ProdType2 1 9
# 2 ProdType2 2 7
# 3 ProdType2 3 9
答案 1 :(得分:0)
我想你可能会在这里找到你需要的东西: How to transform XML data into a data.frame?
这xmlToList()
看起来是正确的。然后,您可以使用其中一种apply方法将其放入数据框架中。在上面的链接有一个grea解释!