2016-03-30 2 views
0

Моего образца XMLРазбор файлов XML в R: Извлечение dataframe из XML набора узлов

- <Inrix responseId="123" statusText="" createdDate="2016-01-29T05:57:00Z"> 
    - <SegmentSpeedResultSet coverage="255"> 
     - <SegmentSpeedResults timestamp="2016-01-29T05:56:47Z"> 
      - <score="10" speed="57" code="4814018"> 
        <SubSegment speed="57" offset="0,1753"/> 
       </Segment> 
      - <score="30" speed="57" code="4814018" cvalue="57"> 
        <SubSegment speed="57" offset="0,1753"/> 
        </Segment> 
      </SegmentSpeedResults> 
     </SegmentSpeedResultSet> 
</Inrix> 

Я хочу, чтобы извлечь «скорость», «код» и «cvalue» для всех записей, когда оценка равна 30. cvalue присутствует только тогда, когда оценка равна 30, в противном случае она опускается. В настоящее время мой код

input <- xmlParse("20160128-235648.xml") 
nodes <- getNodeSet(input,"//Segment[@score='30']") 

Это создание XML NodeSet «узлы», содержащие данные только тогда, когда оценка 30. Похоже, что этот

[[4584]] 
<Segment code="63365958" speed="41" score="30" c-value="0"> 
    <SubSegment speed="41" offset="0,433"/> 
</Segment> 

attr(,"class") 
[1] "XMLNodeSet" 

Однако, я не в состоянии преобразовать эту XMLnodeset в dataframe со значениями «кода», «cvalue», скорость». lapply(nodes, function (x) xmlSApply(x,xmlValue)) является извлечение пустых векторов из„подотрезка“, а не„сегмент“.

Мне также нужно сохранить„метку“в„SegmentSpeedResults“как отдельная переменная.

+0

См: http://stackoverflow.com/questions/36247451/r-xml-tree-to-dataframe/36247826#36247826. Обратите внимание, что вам понадобится xmlAttrs, а не xmlValue. –

+0

Использование 'sapply (nodes, function (x) xmlSApply (x, xmlAttrs))' извлекает dataframe из «Subsegment», а не из «Segment» – Sumit

ответ

0

Выполнение sapply с помощью xAttrs решило мою проблему извлечения значений под узлом «Сегмент». Это работало отлично для меня

nodes <- getNodeSet(input,"//Segment[@score='30']") 
all_parameters <- sapply(nodes, xmlAttrs) 
Смежные вопросы