У меня есть XML-файл с узлами с тем же именем, и я не могу узнать, как выбрать данные, которые я хочу, чтобы создать фрейм данных. Я новичок в R и XML, и я не могу заставить его работать!разбор XML в R, когда несколько узлов с одинаковыми именами
Мой 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>
код содержит различные узлы с именем «TimeSeries» с тем же типом данных (здесь Период не разработана для того, чтобы увидеть всю структуру)
<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 Но безуспешно. Мой код выглядит так, но я в результате dataframe не содержит данных:
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")))
Большое вам спасибо за вашу помощь!
Итак, в конце концов, это то, что я сделал: 'XML. fileexp <- "https://website.com" xml.urlexp <-getURL (xml.fileexp) док <-xmlParse (xml.urlexp) DF <- ldply (xmlToList (док), data.frame) dfexp <-df [df $ .id == "TimeSeries",] ' – Daldal
Ок, извините, я должен прокомментировать два раза .. не осталось времени для редактирования! Затем у меня был блок данных с каждой вещью внутри моих узлов, перечисленных в списке (в строках). Поскольку время начала и остановки дано, я мог бы написать код, учитывающий количество позиций в интервале. Вероятно, это не самое умное решение, но оно работает! – Daldal