Let's use a piece of code to reproduce the problem.
At first glance, the result is puzzling:
Copy Code code as follows:
<?php
$string = <<<eof
<data>
<foo><bar>hello</bar></foo>
<foo><bar>world</bar></foo>
</data>
EOF;
$data = simplexml_load_string ($string);
Print_r ($data);
Print_r ($data->foo);
?>
At first glance, the result is puzzling:
Copy Code code as follows:
SimpleXMLElement Object
(
[foo] => Array
(
[0] => simplexmlelement Object
(
[Bar] => Hello
)
[1] => simplexmlelement Object
(
[Bar] => World
)
)
)
SimpleXMLElement Object
(
[Bar] => Hello
)
Obviously Print_r shows Foo is an array of two bar elements, but it only shows a bar element at the end!
The reason is actually very simple, in the result of the simplexml_load_string as shown above, Foo is not an array, but an iterative object!
You can confirm this:
Copy Code code as follows:
foreach ($data->foo as $v) Print_r ($v);
foreach ($data->children () as $v) Print_r ($v);
It seems that the appearance of Print_r or var_dump is not entirely believable, and pay more attention to it.
If we get the XML data as follows: (can be obtained using curl, fsockopen, etc.)
Copy Code code as follows:
<?xml version= "1.0" encoding= "UTF-8"?>
<dict num= "219" id= "219" name= "219" >
<key> Hello </key>
<pos></pos>
<acceptation>Array;Array;Array;</acceptation>
<sent>
<orig>haven ' t seen for a long time. How are you?</orig>
<trans> have been gone for days, how are you? </trans>
</sent>
<sent>
<orig>hello! How are you?</orig>
<trans> Hey, how are you? </trans>
</sent>
<sent>
<orig>hello, brooks! How are you?</orig>
<trans> Hey, Brooks! How are you? </trans>
</sent>
<sent>
<orig>hi, Barbara, how are you?</orig>
<trans> Hey, Barbara, how are you? </trans>
</sent>
<sent>
<orig>how Are you? -quite, thank you.</orig>.
<trans> How are you? -Very well, thank you. </trans>
</sent>
</dict>
After simplexml_load_string get:
Copy Code code as follows:
SimpleXMLElement Object
(
[@attributes] => Array
(
[Num] => 219
[ID] => 219
[Name] => 219
)
[Key] => Hello
[POS] => simplexmlelement Object
(
)
[acceptation] => array;array;array
[sent] => Array
(
[0] => simplexmlelement Object
(
[orig] => Haven ' t seen for a long time. How are?
[Trans] => 's been gone for days, how are you?
)
[1] => simplexmlelement Object
(
[orig] => Hello! How are?
[Trans] => Hey, how are you?
)
[2] => simplexmlelement Object
(
[orig] => Hello, brooks!. How are?
[Trans] => Hello, Brooks! How are you?
)
[3] => simplexmlelement Object
(
[orig] => Hi, Barbara, how are you?
[Trans] => Hey, Barbara, how are you?
)
[4] => simplexmlelement Object
(
[Orig] => how are? -quite, thank you.
[Trans] =>, how are you? -Very well, thank you.
)
)
)
We can get the values we want in the PHP language in the following ways:
Copy Code code as follows:
<?php
$data = <<<xml
<?xml version= "1.0" encoding= "UTF-8"?>
<dict num= "219" id= "219" name= "219" >
<key> Hello </key>
<pos></pos>
<acceptation>Array;Array;Array;</acceptation>
<sent>
<orig>haven ' t seen for a long time. How are you?</orig>
<trans> have been gone for days, how are you? </trans>
</sent>
<sent>
<orig>hello! How are you?</orig>
<trans> Hey, how are you? </trans>
</sent>
<sent>
<orig>hello, brooks! How are you?</orig>
<trans> Hey, Brooks! How are you? </trans>
</sent>
<sent>
<orig>hi, Barbara, how are you?</orig>
<trans> Hey, Barbara, how are you? </trans>
</sent>
<sent>
<orig>how Are you? -quite, thank you.</orig>.
<trans> How are you? -Very well, thank you. </trans>
</sent>
</dict>
XML;
$xmldata = simplexml_load_string ($data);
Header ("content-type:text/html; Charset=utf-8 ");
Print_r ($xmldata);
echo "<br/>". Trim ($xmldata->sent[0]->orig); Haven ' t seen for a long time. How are?
echo "<br/>". Trim ($xmldata->key); How are you doing
?>