如何从 XML 文件中读取 base64 数值向量?
How to read a base64 numerical vector from an XML file?
我正在尝试从 XML 文件中读取 Ydata。包含 Ydata 的 Base64 字符串是一个 1245 元素的数值向量,存储在 data$ATR 中。该文件已根据 gaml.org 标准进行编码。
一整天尝试了太多东西,但是 none 正在工作...不会 post 这里所有我尝试过的无数东西都不起作用。我没主意了。如何将其转换为 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
我无权访问 URL(公司过滤),但此示例可能有所帮助:
实际样本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))
那是一个丑陋的文件 ;-) 它看起来是从 these guys.
输出的
使用数据文件中此 XML 标签的 numvalues
:
<values byteorder="INTEL" format="FLOAT32" numvalues="1245">
如果你这样做:
library(base64enc)
head(readBin(base64decode(data$ATR), "double", 1245, 4), 10)
我假设 numvalues
的 1245
是二进制字段中浮点数 # 的数量——事实证明这是一个很好的假设。
它给出:
## [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 会因为质疑它的行为而责备我。
我正在尝试从 XML 文件中读取 Ydata。包含 Ydata 的 Base64 字符串是一个 1245 元素的数值向量,存储在 data$ATR 中。该文件已根据 gaml.org 标准进行编码。
一整天尝试了太多东西,但是 none 正在工作...不会 post 这里所有我尝试过的无数东西都不起作用。我没主意了。如何将其转换为 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
我无权访问 URL(公司过滤),但此示例可能有所帮助:
实际样本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))
那是一个丑陋的文件 ;-) 它看起来是从 these guys.
输出的使用数据文件中此 XML 标签的 numvalues
:
<values byteorder="INTEL" format="FLOAT32" numvalues="1245">
如果你这样做:
library(base64enc)
head(readBin(base64decode(data$ATR), "double", 1245, 4), 10)
我假设 numvalues
的 1245
是二进制字段中浮点数 # 的数量——事实证明这是一个很好的假设。
它给出:
## [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 会因为质疑它的行为而责备我。