PHP XML-错误值返回

时间:2019-03-03 10:26:34

标签: php xml parsing xml-parsing

目前,我正在从事一个电子商务项目。我有完整的XML产品,需要在电子商店中实现。

问题是我的XML解析器返回错误值,例如:我有float 32 000,00,它仅将32解析为我的php变量。我要解析的数字以某种方式除以千,而我不知道为什么。与具有32 000的XML文件完全相同的代码可以正常工作。它们是在初始化SimpleXML对象时需要设置的任何转换设置吗?

感谢帮助。

1 个答案:

答案 0 :(得分:0)

让我们看看

  

我有32000,00的浮点数并且可以解析

否,您有一个字符串"32 000, 00"。因此,如果我们看看PHP如何进行杂耍

http://php.net/manual/en/language.types.type-juggling.php

我们看到一些这样的例子:

$foo = 5 * "10 Little Piggies"; // $foo is integer (50)

因此,这2个乘积的值是505*10,十个是从"10 Little Piggies"中解析出来的。 PHP将对您具有的规则应用相同的规则,从而产生32。因为它是那些spaces PHP的字符串,所以它几乎与上述方法完全一样。

您可以轻松地对此进行测试:

echo floatval('32 000, 00');

输出

32 

Sandbox

您可能必须手动将其转换为应有的形式。一件简单的事情就是删除空格:

  echo floatval(str_replace([' ',','], ['','.'], '32 000, 00'));
  #output 32000
  echo floatval(str_replace([' ',','], ['','.'], '32 290,01'));
  #output 32290.01

如果我没记错的话,某些国家/地区会使用,作为小数分隔符的.。但是我不得不用,代替.才能使它们工作。在某些情况下,这可能行不通,但如果没有更大的数据样本,我就不能说当然可以。

这些空间在那里或为什么在那里,我不知道。最好将它们从XML中完全删除,但这可能是不可能的。

在问题中没有一些实际的代码,这是我能做的最好的事情。

干杯!