我有以下XML数据,我想进行计算
<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
...
</data>
如上所述,有两个问题,一个是字符串格式的值,另一个问题是值的类型不同,有的使用+/-,有的使用范围。
从逻辑上讲,我知道该怎么做,只需要使用if-else来检测不同的格式,例如:
if (tag "value" contains "+/-"):
Separate the string by "+/-", convert the number from string to number
use first number + last number to find the biggest number
use first number - last number to find the smallest number
if (tag "value" contains "-"):
Separate the string by "-", convert the number from string to number
first number is smallest number, last number is biggest number
if (tag "value" contains a "whole number"):
Just convert it into number format and done.
这是编程的样子,我是一名学生,我目前正在学习R语言,我对如何做有想法,但是我不知道如何编码,也许有一些库或执行此操作的功能。
如果您知道怎么做,请在此方面帮助我,非常感谢,非常感谢您的帮助:)
h <- "<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
</data>
"
h <- XML::xmlParse(h)
v <- XML::xpathSApply(h, "//value", XML::xmlValue)
lapply(v, function(x) {
if (stringr::str_detect(x,"\\+/-")) {
num1 <- stringr::str_extract(x, ".+(?=\\+/-)")
num2 <- stringr::str_extract(x, "(?<=\\+/-).+")
list(
"+" = sum(as.numeric(c(num1, num2))),
"-" = diff(as.numeric(c(num1, num2)))
)
} else {
eval(parse(text=v[1]))
}
})