2016-03-30 29 views
0

Benim örnek XML den dataframe ÖzüAyrıştırma XML dosyaları: XML nodeset

Ben skor 30'a eşit olduğunda "hız", "kod" ve tüm girişler için "cvalue" çıkarmak istediğiniz
- <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, yalnızca skor 30 olduğunda bulunur, aksi halde atlanır. Bu puan O Ancak bu

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

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

benziyor 30'dur yalnızca verilerini içeren XML nodeset "düğümleri" yaratıyor

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

Halen kodum, ben bu XMLnodeset dönüştürmek mümkün değilim "Code", "cvalue", speed "değerlerine sahip bir dataframe. lapply(nodes, function (x) xmlSApply(x,xmlValue))," Segment "yerine" Subsegment "öğesinden boş vektörleri ayıklar.

" SegmentSpeedResults "içinde" timestamp "değerini de kaydetmem gerekir. bağımsız değişken

+0

See için iyi çalıştı: http://stackoverflow.com/questions/36247451/r-xml-tree-to-dataframe/36247826#36247826. XmlValue yerine xmlAttrs gerekeceğini unutmayın. –

+0

Sapply (nodes, function (x) xmlSApply (x, xmlAttrs)) 'nı kullanarak" Segment "den ziyade" Subsegment "kısmından dataframe çıkartın – Sumit

cevap

0

xAttrs ile sapıklık yapmak, "Segment" düğümünün altındaki değerleri ayıklama sorunumu çözdü. Bu beni

nodes <- getNodeSet(input,"//Segment[@score='30']") 
all_parameters <- sapply(nodes, xmlAttrs)