Импортировать TCX в R с помощью пакета XML

Я пытаюсь импортировать текущие данные GPS в R из файла TCX, используя пакет XML. Вот небольшой образец данных, которые у меня есть (только с 3 точками трека вместо ~ 900)

<?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"))

Однако это не удается, и в результате получается пустой фрейм данных. Однако я обнаружил, что если я удалю

 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"

из тега TrainingCenterDatabase в начале файла, этот импорт будет выполняться правильно, как и ожидалось. Т.е. используя следующие данные:

<?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>

И я получаю нужный мне фрейм данных: (кроме позиции, не разделенной на широту и долготу, но я ожидаю, что смогу с этим справиться, если только кто-то не предложит более простой способ сделать это напрямую с помощью 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?

Большое спасибо

5
задан Alessandro Jacopson 5 January 2014 в 13:59
поделиться