2011-11-26 3 views
4

XML 패키지를 사용하여 GPS 실행 데이터를 TCX 파일에서 R로 가져 오려고합니다. 여기에 내가 가지고있는 데이터의 작은 샘플입니다 (와는 불과 3 트랙 포인트 대신 ~ 900)XML 패키지를 사용하여 TCX를 R로 가져 오기

<?xml version="1.0" encoding="UTF-8"?> 
<TrainingCenterDatabase xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"> 
<Activities> 
    <Activity Sport="Running"> 
     <Id>2011-10-30T16:05:48Z</Id> 
     <Lap StartTime="2011-10-30T16:05:48Z"> 
      <TotalTimeSeconds>3855.99</TotalTimeSeconds> 
      <DistanceMeters>12498.8115</DistanceMeters> 
      <MaximumSpeed>4.45662498</MaximumSpeed> 
      <Calories>1011</Calories> 
      <Intensity>Active</Intensity> 
      <TriggerMethod>Manual</TriggerMethod> 
      <Track> 
       <Trackpoint> 
        <Time>2011-10-30T16:05:48Z</Time> 
        <Position> 
         <LatitudeDegrees>52.33613318</LatitudeDegrees> 
         <LongitudeDegrees>-1.58814317</LongitudeDegrees> 
        </Position> 
        <AltitudeMeters>77.5234375</AltitudeMeters> 
        <DistanceMeters>0.00000000</DistanceMeters> 
       </Trackpoint> 
       <Trackpoint> 
        <Time>2011-10-30T16:05:49Z</Time> 
        <Position> 
         <LatitudeDegrees>52.33614810</LatitudeDegrees> 
         <LongitudeDegrees>-1.58814283</LongitudeDegrees> 
        </Position> 
        <AltitudeMeters>77.5234375</AltitudeMeters> 
        <DistanceMeters>1.77584004</DistanceMeters> 
       </Trackpoint> 
       <Trackpoint> 
        <Time>2011-10-30T16:05:54Z</Time> 
        <Position> 
         <LatitudeDegrees>52.33627098</LatitudeDegrees> 
         <LongitudeDegrees>-1.58818323</LongitudeDegrees> 
        </Position> 
        <AltitudeMeters>76.0814209</AltitudeMeters> 
        <DistanceMeters>15.7694969</DistanceMeters> 
       </Trackpoint> 
      </Track> 
     </Lap> 
    </Activity> 
</Activities> 
</TrainingCenterDatabase> 

내가 그러나 이것이 실패

doc = xmlParse("filetest.tcx") 
xmlToDataFrame(nodes = getNodeSet(doc, "//Trackpoint")) 

를 사용하여 트랙 포인트를 읽으려고하고, 그리고 결과는 빈 데이터 프레임입니다. 그러나 나는 파일의 시작에서 TrainingCenterDatabase 태그에서

xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" 

을 제거하면 예상,이 가져 오기가 제대로 실행 것으로 나타났습니다. 예. 다음 데이터 사용 :

<?xml version="1.0" encoding="UTF-8"?> 
<TrainingCenterDatabase> 
    <Activities> 
     <Activity Sport="Running"> 
      <Id>2011-10-30T16:05:48Z</Id> 
      <Lap StartTime="2011-10-30T16:05:48Z"> 
       <TotalTimeSeconds>3855.99</TotalTimeSeconds> 
       <DistanceMeters>12498.8115</DistanceMeters> 
       <MaximumSpeed>4.45662498</MaximumSpeed> 
       <Calories>1011</Calories> 
       <Intensity>Active</Intensity> 
       <TriggerMethod>Manual</TriggerMethod> 
       <Track> 
        <Trackpoint> 
         <Time>2011-10-30T16:05:48Z</Time> 
         <Position> 
          <LatitudeDegrees>52.33613318</LatitudeDegrees> 
          <LongitudeDegrees>-1.58814317</LongitudeDegrees> 
         </Position> 
         <AltitudeMeters>77.5234375</AltitudeMeters> 
         <DistanceMeters>0.00000000</DistanceMeters> 
        </Trackpoint> 
        <Trackpoint> 
         <Time>2011-10-30T16:05:49Z</Time> 
         <Position> 
          <LatitudeDegrees>52.33614810</LatitudeDegrees> 
          <LongitudeDegrees>-1.58814283</LongitudeDegrees> 
         </Position> 
         <AltitudeMeters>77.5234375</AltitudeMeters> 
         <DistanceMeters>1.77584004</DistanceMeters> 
        </Trackpoint> 
        <Trackpoint> 
         <Time>2011-10-30T16:05:54Z</Time> 
         <Position> 
          <LatitudeDegrees>52.33627098</LatitudeDegrees> 
          <LongitudeDegrees>-1.58818323</LongitudeDegrees> 
         </Position> 
         <AltitudeMeters>76.0814209</AltitudeMeters> 
         <DistanceMeters>15.7694969</DistanceMeters> 
        </Trackpoint> 
       </Track> 
      </Lap> 
     </Activity> 
    </Activities> 
</TrainingCenterDatabase> 

을 그리고 난 내가 원하는 dataframe 얻을 : (떨어져 위도 및 장기로 분할되지 않는 위치에서,하지만 누군가가 제안 할 수 있습니다하지 않는 한 내가, 그 처리 할 수 ​​있어야 것으로 예상 간단한 방법이 직접 사용하여 XPath를 할까?)

> xmlToDataFrame(nodes = getNodeSet(doc, "//Trackpoint")) 
        Time    Position AltitudeMeters DistanceMeters 
1 2011-10-30T16:05:48Z 52.33613318-1.58814317  77.5234375  0.00000000 
2 2011-10-30T16:05:49Z 52.33614810-1.58814283  77.5234375  1.77584004 
3 2011-10-30T16:05:54Z 52.33627098-1.58818323  76.0814209  15.7694969 

는 분명 내가 수동으로 내가 가져올 모든 파일에서이를 제거해야하고 싶지 않아요. 내가 잘못하고있는 일 (XPath로 아마도?)이 작업을 방해하거나 XML 데이터에서 섹션을 제거하는 방법이 있습니까?

많은 감사

답변

9

네임 스페이스 문제입니다. 그냥 직접 위도와 경도로 위치 분할을 구하는

xmlToDataFrame(nodes <- getNodeSet(doc, "//ns:Trackpoint", "ns")) 

이, 당신은 다음과 같은

nodes <- getNodeSet(doc, "//ns:Trackpoint", "ns") 
mydf <- plyr::ldply(nodes, as.data.frame(xmlToList)) 
setNames(mydf, c('time', 'lat', 'long', 'alt', 'distance')) 

그것은 지금

    time   lat  long  alt distance 
1 2011-10-30T16:05:48Z 52.33613318 -1.58814317 77.5234375 0.00000000 
2 2011-10-30T16:05:49Z 52.33614810 -1.58814283 77.5234375 1.77584004 
3 2011-10-30T16:05:54Z 52.33627098 -1.58818323 76.0814209 15.7694969 
+0

작품을 제공 할 수있는 수행, 감사합니다! –

관련 문제