如何计算XML文件中的数字(字符串格式)

问题描述 投票:0回答:1

我有以下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语言,我对如何做有想法,但是我不知道如何编码,也许有一些库或执行此操作的功能。

如果您知道怎么做,请在此方面帮助我,非常感谢,非常感谢您的帮助:)

r converters
1个回答
0
投票
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])) } })
© www.soinside.com 2019 - 2024. All rights reserved.