当多个节点具有相同名称时将 XML 解析为 R

Dal*_*dal 5 xml r

我有一个 XML 文件,其中的节点具有相同的名称,但我不知道如何选择我想要的数据来创建数据框。我是 R 和 XML 的新手,我似乎无法让它工作!

我的 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>
Run Code Online (Sandbox Code Playgroud)

该代码包含名为“TimeSeries”的不同节点,具有相同类型的数据(这里没有开发Period以便查看整个结构)

<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>
Run Code Online (Sandbox Code Playgroud)

我想获取以下格式的数据:

psrType    position   quantity  
ProdType1   1         9
...        ...        ...
ProdType2   1         ...
Run Code Online (Sandbox Code Playgroud)

我尝试应用这篇文章中提到的解决方案:How to parse XML to R 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")))
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

sco*_*tus 0

我想你可能会在这里找到你需要的东西: 如何将 XML 数据转换为 data.frame?

xmlToList()看起来差不多是对的。然后,您可以使用其中一种 apply 方法将其放入数据框架中。上面的链接有很好的解释!