ID: 36379
User updated by: rele at gmx dot de
Reported By: rele at gmx dot de
-Status: Feedback
+Status: Open
Bug Type: SimpleXML related
Operating System: Windows XP SP1
PHP Version: 5.1.4
New Comment:
I tried the code with the 5.2.0RC2-dev Win32 build (Date => Jul 27 2006
04:15:19), but it produced the same result, and $parent[0] was always
NULL, too.
In addition I had to modify the second example code from
foreach($simplexml as &$parent) {
to
foreach($simplexml as $parent) {
because it produced:
PHP Fatal error: An iterator cannot be used with foreach by reference
Previous Comments:
------------------------------------------------------------------------
[2006-07-27 02:00:36] [EMAIL PROTECTED]
Please try using this CVS snapshot:
http://snaps.php.net/php5.2-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5.2-win32-latest.zip
------------------------------------------------------------------------
[2006-05-10 20:11:35] rele at gmx dot de
Description:
------------
Maybe it will be clearer if I use type casting.
As you can see in the result output, there is no array index 0 in each
parent which should store the text value of the first child, like there
are for all childs.
Especially not for parent 1a "ParentText " and 1c " ".
The attributes are fine, either by direct access $parent['style'] or by
using $parent->attributes().
But $parent[0] is always NULL.
Reproduce code:
---------------
$test_simplexml_errors_svg = <<<EOD
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[
<!ENTITY E1 'font-size:7pt'>
]>
<svg id="svg_output" version="1.1" xmlns="http://www.w3.org/2000/svg"
viewBox="-2 -7 1561 708">
<text id="1a" style="&E1;" x="300" y="100">ParentText <tspan id="2a"
dy="12" x="310">ChildText1</tspan><tspan id="3a" dy="12" x="350">
</tspan></text>
<text id="1b" style="&E1;" x="400" y="200"><tspan id="2b" dy="12"
x="410">ChildText1</tspan><tspan id="3b" dy="12" x="450">
</tspan></text>
<text id="1c" style="&E1;" x="500" y="300"> <tspan id="2c" dy="12"
x="510">ChildText1</tspan><tspan id="3c" dy="12"
x="550">ChildText2</tspan></text>
</svg>
EOD;
$simplexml = simplexml_load_string($test_simplexml_errors_svg);
foreach($simplexml as &$parent) {
echo 'parent ', $parent->getName(), ' ', $parent['id'], ' = "',
(string) $parent, '"', "\n";
print_r($parent);
foreach($parent as $child) {
echo ' child ', $child->getName(), ' ', $child['id'], ' = "',
(string) $child, '"', "\n";
print_r($child);
}
}
Actual result:
--------------
parent text 1a = "ParentText "
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1a
[style] => font-size:7pt
[x] => 300
[y] => 100
)
[tspan] => Array
(
[0] => ChildText1
[1] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3a
[dy] => 12
[x] => 350
)
[0] =>
)
)
)
child tspan 2a = "ChildText1"
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 2a
[dy] => 12
[x] => 310
)
[0] => ChildText1
)
child tspan 3a = "
"
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3a
[dy] => 12
[x] => 350
)
[0] =>
)
parent text 1b = ""
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1b
[style] => font-size:7pt
[x] => 400
[y] => 200
)
[tspan] => Array
(
[0] => ChildText1
[1] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3b
[dy] => 12
[x] => 450
)
[0] =>
)
)
)
child tspan 2b = "ChildText1"
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 2b
[dy] => 12
[x] => 410
)
[0] => ChildText1
)
child tspan 3b = "
"
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3b
[dy] => 12
[x] => 450
)
[0] =>
)
parent text 1c = " "
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1c
[style] => font-size:7pt
[x] => 500
[y] => 300
)
[tspan] => Array
(
[0] => ChildText1
[1] => ChildText2
)
)
child tspan 2c = "ChildText1"
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 2c
[dy] => 12
[x] => 510
)
[0] => ChildText1
)
child tspan 3c = "ChildText2"
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3c
[dy] => 12
[x] => 550
)
[0] => ChildText2
)
------------------------------------------------------------------------
[2006-02-15 06:55:52] [EMAIL PROTECTED]
print_r (and var_dump) isn't a reliable method for checking,
what's "inside" a simplexml object.
Please check with an iterator, if there's really something
missing and provide a reproducable script.
------------------------------------------------------------------------
[2006-02-13 15:24:18] rele at gmx dot de
Description:
------------
I want to parse SVG XML code with SimpleXML, but under certain
circumstances the parsed SimpleXMLElements do not contain either
attributes or child tags.
Reproduce code:
---------------
$test_simplexml_errors_svg = <<<EOD
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[
<!ENTITY E1 'font-size:7pt'>
]>
<svg id="svg_output" version="1.1" xmlns="http://www.w3.org/2000/svg"
viewBox="-2 -7 1561 708">
<text id="1a" style="&E1;" x="300" y="100">ParentText <tspan id="2a"
dy="12" x="310">ChildText1</tspan><tspan id="3a" dy="12" x="350">
</tspan></text>
<text id="1b" style="&E1;" x="400" y="200"><tspan id="2b" dy="12"
x="410">ChildText1</tspan><tspan id="3b" dy="12" x="450">
</tspan></text>
<text id="1c" style="&E1;" x="500" y="300"><tspan id="2c" dy="12"
x="510">ChildText1</tspan><tspan id="3c" dy="12"
x="550">ChildText2</tspan></text>
</svg>
EOD;
print_r(simplexml_load_string($test_simplexml_errors_svg));
Expected result:
----------------
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => svg_output
[version] => 1.1
[viewBox] => -2 -7 1561 708
)
[text] => Array
(
[0] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1a
[style] => font-size:7pt
[x] => 300
[y] => 100
)
[0] => ParentText
)
[1] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1b
[style] => font-size:7pt
[x] => 400
[y] => 200
)
[tspan] => Array
(
[0] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 2b
[dy] => 12
[x] => 410
)
[0] => ChildText1
)
[1] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3b
[dy] => 12
[x] => 450
)
[0] =>
)
)
)
[2] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1c
[style] => font-size:7pt
[x] => 500
[y] => 300
)
[tspan] => Array
(
[0] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 2c
[dy] => 12
[x] => 510
)
[0] => ChildText1
)
[1] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3c
[dy] => 12
[x] => 550
)
[0] => ChildText2
)
)
)
)
)
Actual result:
--------------
SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => svg_output
[version] => 1.1
[viewBox] => -2 -7 1561 708
)
[text] => Array
(
[0] => ParentText
[1] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1b
[style] => font-size:7pt
[x] => 400
[y] => 200
)
[tspan] => Array
(
[0] => ChildText1
[1] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 3b
[dy] => 12
[x] => 450
)
[0] =>
)
)
)
[2] => SimpleXMLElement Object
(
[EMAIL PROTECTED] => Array
(
[id] => 1c
[style] => font-size:7pt
[x] => 500
[y] => 300
)
[tspan] => Array
(
[0] => ChildText1
[1] => ChildText2
)
)
)
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=36379&edit=1