带有xpathSApply的xmlValue将所有叶值连接成一个字符

时间:2014-10-21 20:24:24

标签: xml r xml-parsing

我正在解析来自xml文件结构的数据,如下所示:

<Filegram Status="Idle" Version="3.0.0.12">
<CXDVideo>
<ArrayOfDouble xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<double>0.074345000088214874</double>
<double>0.081780999898910522</double>
<double>0.089218996465206146</double>
<double>0.0966539978981018</double>
<double>0.10408999770879746</double>
<double>0.1115259975194931</double>
<double>0.11896199733018875</double>
</ArrayOfDouble>
</CXDVideo>
</Filegram>

使用doc1 <- xmlParse()导入xml文件后,我尝试使用此命令提取数字:

xpathSApply(doc1, "//Video/ArrayOfDouble", xmlValue) 

我将所有值都作为单个字符获取:

[[1]]
[1] "00.00623949430882930760.0132457073777914050.0202680919319391250.0306097287684679030.0346436910331249240.0412975363433361050.0483214072883129120.0553476661443710330.0623622909188270570.0693683102726936340.0763849914073944090.083491444587707520.0904

使用xmlToDataFrame或xmlToList解析此部分很好但非常慢。我希望使用xpathSApply来加速数据提取过程,但是无法让它工作。

1 个答案:

答案 0 :(得分:1)

那是因为你想抓住每个&#34; double&#34;的xmlValue。节点,而不是整个&#34; ArrayOfDouble&#34; xml片段。尝试

as.numeric(xpathSApply(doc1, "//Video/ArrayOfDouble/double", xmlValue) )

也会将字符值转换为数值。