2010-05-20 46 views
1

我試圖訪問下面元素中的數字,但我無法從中獲取數值。訪問SimpleXMLElement中的數字屬性

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

帖子源XML的樣本,或給它的鏈接。否則,就像占卜一樣。此外,千萬不要使用print_r()來檢查SimpleXMLElement。 – 2010-05-21 15:44:55

回答

6
$x = 0; 
echo $object->$x; 

echo $object->{0}; 

其原因是, '0' 不是在PHP有效的標識符。所以當你輸入'0'時,它看到的只是一個T_LNUMBER。所有名字都遵循可變的命名約定。唯一的不同之處在於,前面帶有 - >的成員變量不需要$前綴。 http://www.php.net/manual/en/language.variables.basics.php

{0}起作用,因爲{}表示標識符是簡單表達式的結果。所以{$ x}在這種情況下與$ x相同,但{0}與'0'不同,因爲它們導致不同的解析器令牌。

+0

你真的有這個工作嗎?我非常懷疑它會給出預期的結果。 – 2010-05-20 23:10:42

+0

是的。我試過了,它的工作原理和描述一樣... – ircmaxell 2010-05-21 12:31:19

+1

有趣的是,它在PHP 5.3.2/libxml 2.7.7上完全不起作用。 – 2010-05-21 13:53:31

0

XML elements cannot begin with a digit。即使你可以以某種方式創建這樣的元素,SimpleXML(也可能是大多數解析器)將無法讀取結果文檔。

<!-- legal --> 
<a0>foo</a0> 

<!-- not legal -- note how even Stack Overflow's highlighter chokes on it --> 
<0>foo</0> 
1

我不知道怎麼樣的節點,企業命名爲「0」,但你看到的錯誤是因爲SimpleXML的總是返回一個對象。如果必須將結果用作數字,則將其轉換爲適當的類型,例如,

number_format((int) $ruleXml->HourlyUsage) 
0

您可以使用__toString()獲得子對象的字符串值,所以它會像$object->__toString();