From:             norbert_schuetz at bigfoot dot com
Operating system: Linux 2.6.18-5-686
PHP version:      5.2.6
PHP Bug Type:     SimpleXML related
Bug description:  SimpleXML inconsisten behaviour with multiple xml nodes

Description:
------------
PHP 5.2.0-8+etch11 (cli) (built: May 10 2008 10:46:24) from
php5-cli_5.2.0-8+etch10_i386.deb
Linux 2.6.18-5-686 #1 SMP Sun Aug 12 21:57:02 UTC 2007 i686 GNU/Linux
Simplexml support => enabled
Revision => $Revision: 1.151.2.22.2.15 $
Schema support => enabled
libxml2_2.6.27.dfsg-2_i386.deb

Problem description:
--------------------
For multiple identically named XML nodes the data types are not
consistent, results are possibly erratic or at least misleading:

* SimpleXML returns the first array element instead of returning the array
itself when accessing the node - although var_dump() reports the node to be
an array.

* gettype() reports "object" while var_dump() reports "array".

* processing the node with foreach reports the key to be the node name,
not the numeric array id reported by print_r().

Also, for single XML nodes SimpleXML

* gettype() reports "object" while var_dump() reports "array".

* The node content can be accessed as $xml->node as well as $xml->node[0].
If $xml->node is the node's content (a string, that is) $xml->node[0]
should return the first character of the string. At least the documentation
should note the ambitious behavior.


Reproduce code:
---------------
<?php
$xmlstr=<<<EOXML
<?xml version='1.0' standalone='yes'?>
<export>
    <testdata>
        <single>test</single>
        <multiple>one</multiple>
        <multiple>two</multiple>
        <multiple>three</multiple>
    </testdata>
</export>
EOXML;

$xml=new SimpleXMLElement($xmlstr);
print '1. var_dump($xml->testdata):' ."\n";
var_dump($xml->testdata);
print "\n";

print '2. get_type($xml->testdata->single): ';
print gettype($xml->testdata->single) ."\n";
print "\n";

print "3. print \$xml->testdata->single without and with [0]: \n";
print $xml->testdata->single ."\n";
print $xml->testdata->single[0] ."\n";
print "\n";

print '4. var_dump($xml->testdata->single): ';
var_dump($xml->testdata->single);
print "\n";

print '5. get_type($xml->testdata->multiple): ';
print gettype($xml->testdata->multiple) ."\n";
print "\n";

print '6. var_dump($xml->testdata->multiple): ';
var_dump($xml->testdata->multiple);
print "\n";

print '7. foreach($xml->testdata->multiple ...):' ."\n";
foreach ($xml->testdata->multiple as $key=>$item) {
    print $key .' = ' . $item ."\n";
}




Expected result:
----------------
6. var_dump($xml->testdata->multiple): object(SimpleXMLElement)#4 (1) 
array(3) {
  [0]=>
  string(3) "one"
  [1]=>
  string(3) "two"
  [2]=>
  string(5) "three"
}

7. foreach($xml->products->multiple ...):
0 = one
1 = two
2 = three


Actual result:
--------------
1. var_dump($xml->testdata):
object(SimpleXMLElement)#2 (2) {
  ["single"]=>
  string(4) "test"
  ["multiple"]=>
  array(3) {
    [0]=>
    string(3) "one"
    [1]=>
    string(3) "two"
    [2]=>
    string(5) "three"
  }
}

2. get_type($xml->testdata->single): object

3. print $xml->testdata->single without and with [0]:
test
test

4. var_dump($xml->testdata->single): object(SimpleXMLElement)#3 (1) {
  [0]=>
  string(4) "test"
}

5. get_type($xml->testdata->multiple): object

6. var_dump($xml->testdata->multiple): object(SimpleXMLElement)#4 (1) {
  [0]=>
  string(3) "one"
}

7. foreach($xml->testdata->multiple ...):
multiple = one
multiple = two
multiple = three


-- 
Edit bug report at http://bugs.php.net/?id=45023&edit=1
-- 
Try a CVS snapshot (PHP 5.2): 
http://bugs.php.net/fix.php?id=45023&r=trysnapshot52
Try a CVS snapshot (PHP 5.3): 
http://bugs.php.net/fix.php?id=45023&r=trysnapshot53
Try a CVS snapshot (PHP 6.0): 
http://bugs.php.net/fix.php?id=45023&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=45023&r=fixedcvs
Fixed in release:             
http://bugs.php.net/fix.php?id=45023&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=45023&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=45023&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=45023&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=45023&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=45023&r=notwrong
Not enough info:              
http://bugs.php.net/fix.php?id=45023&r=notenoughinfo
Submitted twice:              
http://bugs.php.net/fix.php?id=45023&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=45023&r=globals
PHP 4 support discontinued:   http://bugs.php.net/fix.php?id=45023&r=php4
Daylight Savings:             http://bugs.php.net/fix.php?id=45023&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=45023&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=45023&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=45023&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=45023&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=45023&r=mysqlcfg

Reply via email to