Php 访问SimpleXMLElement中的数值属性
我试图访问下面元素中的数字,但从中获取值时遇到问题Php 访问SimpleXMLElement中的数值属性,php,simplexml,Php,Simplexml,我试图访问下面元素中的数字,但从中获取值时遇到问题 echo $object->0; //returns Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$' SimpleXMLElement Object ( [0:public] => 15810 ) 有什么办法可以让我得到这个价值吗 更新 我意识到这是一个奇怪的错误。。。我正在使
echo $object->0; //returns Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
SimpleXMLElement Object (
[0:public] => 15810
)
有什么办法可以让我得到这个价值吗
更新
我意识到这是一个奇怪的错误。。。我正在使用ebay API获取此值。即使我这样做:
$zero = 0;
$print_r($ruleXml->HourlyUsage->$zero);
它仍然显示相同的情况
SimpleXMLElement Object (
[0:public] => 15810
)
我也尝试了{0}
这是我正在处理的内容的输出
[1] => SimpleXMLElement Object (
[CallName:public] => AddItem
[CountsTowardAggregate:public] => false
[DailyHardLimit:public] => 100000
[DailySoftLimit:public] => 100000
[DailyUsage:public] => 0
[HourlyHardLimit:public] => 100000
[HourlySoftLimit:public] => 100000
[HourlyUsage:public] => 0
[Period:public] => -1
[PeriodicHardLimit:public] => 0
[PeriodicSoftLimit:public] => 0
[PeriodicUsage:public] => 0
[ModTime:public] => 2010-05-04T18:06:08.000Z
[RuleCurrentStatus:public] => NotSet
[RuleStatus:public] => RuleOn
)
事情是这样的
number_format($ruleXml->HourlyUsage) //throws the error: number_format() expects parameter 1 to be double, object given
$ruleXml->HourlyUsage //shows the value on the page
或
原因是“0”在PHP中不是有效的标识符。因此,当您键入“0”时,它只会看到一个T_LNUMBER。所有名称都遵循变量命名约定。唯一的偏差是前面有->的成员变量不需要$prefix
{0}有效,因为{}指示标识符是内部简单表达式的结果。因此{$x}在本例中与$x相同,但{0}与“0”不同,因为它们产生不同的解析器标记。。即使您能够以某种方式创建这样的元素,SimpleXML(很可能是大多数解析器)也无法读取结果文档
<!-- legal -->
<a0>foo</a0>
<!-- not legal -- note how even Stack Overflow's highlighter chokes on it -->
<0>foo</0>
福
福
我不知道名为“0”的节点的业务是什么,但您看到的错误是因为SimpleXML总是返回对象。如果必须将结果用作数字,请将其转换为适当的类型,例如
number_format((int) $ruleXml->HourlyUsage)
您可以使用
\uuuToString()
获取子对象的字符串值,因此它类似于$object->\uuuToString()代码>你真的能用吗?我非常怀疑它会给出预期的结果;echo$object->$x;作品echo$object->{0};不起作用。@TOOTSKI是的,我可以(从master一直到5.0.0):重要的是如何构造类。从数组强制转换以错误的方式更改数字键(和错误)。而这个问题是关于带有数字键的对象,而不是铸造的数组…@ircmaxell你能描述或指出坏的和有缺陷的方式吗?谢谢。发布源XML的示例或链接。否则,这就类似于占卜。此外,切勿使用print_r()检查SimpleXMLElement。
<!-- legal -->
<a0>foo</a0>
<!-- not legal -- note how even Stack Overflow's highlighter chokes on it -->
<0>foo</0>
number_format((int) $ruleXml->HourlyUsage)