Introduction to simplexml_load_string instance in php
This article describes how to use simplexml_load_string in php. For more information, see
Use a piece of code to reproduce the problem.
At first glance, the results are confusing:
The Code is 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 results are confusing:
The Code is as follows:
SimpleXMLElement Object
(
[Foo] => Array
(
[0] => SimpleXMLElement Object
(
[Bar] => hello
)
[1] => SimpleXMLElement Object
(
[Bar] => world
)
)
)
SimpleXMLElement Object
(
[Bar] => hello
)
Obviously, print_r shows that foo is an array with two bar elements, but only one bar element is displayed!
The reason is actually very simple. In the result of simplexml_load_string shown above, foo is not an array but an iteration object!
You can confirm as follows:
The Code is as follows:
Foreach ($ data-> foo as $ v) print_r ($ v );
Foreach ($ data-> children () as $ v) print_r ($ v );
It seems that the representation of print_r or var_dump is not completely credible. Please pay attention to it.
Assume that the obtained XML data is as follows: (you can use curl, fsockopen, etc)
The Code is as follows:
<? Xml version = "1.0" encoding = "UTF-8"?>
<Dict num = "219" id = "219" name = "219">
<Key> Hello </key>
<Pos> </pos>
<Acceptation> Array; </acceptation>
<Sent>
<Orig> Haven't seen you for a long time. How are you? </Orig>
<Trans> the system disappeared several days ago. 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> hello, 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 well, thank you. </orig>
<Trans> how are you? -Good. Thank you. </Trans>
</Sent>
</Dict>
After simplexml_load_string:
The Code is as follows:
SimpleXMLElement Object
(
[@ Attributes] => Array
(
[Num] = & gt; 219
[Id] = & gt; 219
[Name] = & gt; 219
)
[Key] => hello
[Pos] => SimpleXMLElement Object
(
)
[Acceptation] => Array;
[Sent] => Array
(
[0] => SimpleXMLElement Object
(
[Orig] => Haven't seen you for a long time. How are you?
[Trans] => it's been several days away. How are you?
)
[1] => SimpleXMLElement Object
(
[Orig] => Hello! How are you?
[Trans] => Hey, hello?
)
[2] => SimpleXMLElement Object
(
[Orig] => Hello, Brooks! How are you?
[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 you? -Quite well, thank you.
[Trans] => how are you? -Good. Thank you.
)
)
)
We can use the following methods in PHP to obtain the desired value:
The Code is 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; </acceptation>
<Sent>
<Orig> Haven't seen you for a long time. How are you? </Orig>
<Trans> the system disappeared several days ago. 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> hello, 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 well, thank you. </orig>
<Trans> how are you? -Good. 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 you for a long time. How are you?
Echo "<br/>". trim ($ xmldata-> key); // hello
?>