从xml文件获取嵌套数据
我有一个从xml文件获取嵌套数据,xml,r,Xml,R,我有一个xml文件,其结构如下: <?xml version="1.0" encoding="utf-8"?> <ScheduleMessage DtdVersion="3" DtdRelease="0"> <MessageIdentification v="ETSOVista-DMinus1TotalLoadForecast-DE-2012-1" /> <MessageVersion v="1" /> <MessageType
xml
文件,其结构如下:
<?xml version="1.0" encoding="utf-8"?>
<ScheduleMessage DtdVersion="3" DtdRelease="0">
<MessageIdentification v="ETSOVista-DMinus1TotalLoadForecast-DE-2012-1" />
<MessageVersion v="1" />
<MessageType v="A11" />
<ScheduleTimeSeries>
<SendersTimeSeriesIdentification v="10YCB-GERMANY--8" />
<SendersTimeSeriesVersion v="1" />
<BusinessType v="A05" />
<Period>
<TimeInterval v="2012-11-15T23:00Z/2012-11-16T23:00Z" />
<Resolution v="PT60M" />
<Interval>
<Pos v="1" />
<Qty v="52452" />
</Interval>
<Interval>
<Pos v="2" />
<Qty v="50527" />
</Interval>
<Interval>
<Pos v="3" />
<Qty v="49221" />
</Interval>
<Interval>
<Pos v="4" />
<Qty v="49344" />
</Interval>
</Period>
</ScheduleTimeSeries>
<ScheduleTimeSeries>
<SendersTimeSeriesIdentification v="10YCB-GERMANY--8" />
<SendersTimeSeriesVersion v="1" />
<BusinessType v="A05" />
<Period>
<TimeInterval v="2012-11-16T23:00Z/2012-11-17T23:00Z" />
<Resolution v="PT60M" />
<Interval>
<Pos v="1" />
<Qty v="50935" />
</Interval>
<Interval>
<Pos v="2" />
<Qty v="48918" />
</Interval>
<Interval>
<Pos v="3" />
<Qty v="47347" />
</Interval>
<Interval>
<Pos v="4" />
<Qty v="46382" />
</Interval>
</Period>
</ScheduleTimeSeries>
</ScheduleMessage>
xml <- xmlInternalTreeParse(file = "test.xml")
xml_top <- xmlRoot(xml)
xml_children <- xmlChildren(x = xml_top)
但当我试图更深入地了解文件时:
xml_children2 <- xmlChildren(x = xml_children)
我还尝试使用
[]
或[[]]
对文件进行子集划分,但这总是会导致我出现相同的错误。使用XQuery处理器(如xqilla
)时,这要简单得多:
$ echo 'for $v in //Qty/@v return xs:string($v)' | xqilla -i test.xml /dev/stdin
52452
50527
49221
49344
50935
48918
47347
46382
然后可以使用read.table
轻松读入输出。您还可以使用该包在R中运行此操作,或如中所示
学分:到我使用以下方法解决了我的问题:
xpathSApply(doc = xml_top,
file = "//ScheduleMessage/ScheduleTimeSeries/Period/Interval/Qty",
fun = xmlAttrs)
试试这个//Qty/@v
xpathSApply(doc = xml_top,
file = "//ScheduleMessage/ScheduleTimeSeries/Period/Interval/Qty",
fun = xmlAttrs)