如何从XML文件中读取base64数值向量?

时间:2015-09-28 12:48:57

标签: xml r base64

我正在尝试从XML文件中读取Ydata。包含Ydata的Base64字符串是1245个元素的数字向量,存储在数据$ ATR中。该文件已根据gaml.org标准进行编码。

整天尝试了太多的事情,但没有一件事在工作......不会在这里发布我尝试过的无数件事,但这些事情都行不通。我没有想法。如何将其转换为R数字向量?

library(XML)
x = XML::xmlTreeParse("http://utsav.podzone.net/T0011VAP1.0.xml")
xmltop = xmlRoot(x)
data = xmlSApply(xmltop, function(x) xmlSApply(x, xmlValue))
(data$ATR)

从一个独立的消息来源,我知道Ydata的前10个元素是:

-0.0903
-0.0751
-0.0605
-0.0471
-0.0353
-0.0249
-0.0159
-0.0082
-0.0017
 0.0035

2 个答案:

答案 0 :(得分:0)

我无权访问该网址(公司过滤),但此示例可能有所帮助:

实际的样本XML是

<root>
<value>123</value>
<value>234</value>
<value>345</value>
</root>

编码为

PHJvb3Q+DQo8dmFsdWU+MTIzPC92YWx1ZT4NCjx2YWx1ZT4yMzQ8L3ZhbHVlPg0KPHZhbHVlPjM0NTwvdmFsdWU+DQo8L3Jvb3Q+

以及访问XML的代码:

library("RCurl")
library("XML")
tmp <- "PHJvb3Q+DQo8dmFsdWU+MTIzPC92YWx1ZT4NCjx2YWx1ZT4yMzQ8L3ZhbHVlPg0KPHZhbHVlPjM0NTwvdmFsdWU+DQo8L3Jvb3Q+";
xml <- base64(tmp, encode=FALSE)

x = XML::xmlTreeParse(xml)
xmltop = xmlRoot(x)
data = xmlSApply(xmltop, function(x) xmlSApply(x, xmlValue))

答案 1 :(得分:0)

这是一个丑陋的文件;-)它看起来是从these guys输出的。

在数据文件中使用此XML标记中的numvalues

<values byteorder="INTEL" format="FLOAT32" numvalues="1245">

如果你这样做:

library(base64enc)

head(readBin(base64decode(data$ATR), "double", 1245, 4), 10)

我假设1245numvalues作为二进制字段中浮点数的数量 - 这被证明是一个很好的假设。

它给出了:

## [1] -0.090307593 -0.075070500 -0.060486197 -0.047122478 -0.035274029 -0.024934530 -0.015949965 -0.008214951
## [9] -0.001725793  0.003505349

这个输出很好地跟踪了你已知的10个元素。

readBin调用表示使用double作为其返回的向量的模式(数据类型),4是每个元素的字节数。

您可能需要将endian="little"作为参数添加到readBin,具体取决于您的体系结构(至少我认为可能是这种情况......我发现readBin低于确定性-OS在使用它来读取色样文件但我确信CRAN guaRdians会因为质疑它的行为而责备我。)