在php中simplexml_load_string() 函數把 XML 字符串載入對象中,下面我來給大家介紹幾個簡單實例的同時也介紹在使用simplexml_load_string的一些需要注意的事項.
先用一段代碼重現一下問題,乍一看,結果很讓人費解,代碼如下:
- <?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);
- ?>
- SimpleXMLElement Object
- (
- [foo] => Array
- (
- [0] => SimpleXMLElement Object
- (
- [bar] => hello
- )
- [1] => SimpleXMLElement Object
- (
- [bar] => world
- )
- ) //開源代碼Vevb.com
- )
- SimpleXMLElement Object
- (
- [bar] => hello
- )
明明print_r顯示foo是一個有兩個bar元素的數組,但是最后卻僅僅顯示了一個bar元素,原因其實很簡單,在如上所示simplexml_load_string的結果里,foo并不是數組,而是一個迭代對象.
可以這樣確認,代碼如下:
foreach ($data->foo as $v) print_r($v);
foreach ($data->children() as $v) print_r($v);
看來,print_r或者var_dump之類的表象并不完全可信,假如我們獲取的XML數據如下,可以使用curl、fsockopen等方式獲取,代碼如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <dict num="219" id="219" name="219">
- <key>你好</key>
- <pos></pos>
- <acceptation>Array;Array;Array;</acceptation>
- <sent>
- <orig>Haven't seen you for a long time. How are you?</orig>
- <trans>多日不見了,你好嗎?</trans>
- </sent>
- <sent>
- <orig>Hello! How are you?</orig>
- <trans>嘿,你好?</trans>
- </sent>
- <sent>
- <orig>Hello, Brooks!How are you?</orig>
- <trans>喂,布魯克斯!你好嗎?</trans>
- </sent>
- <sent>
- <orig>Hi, Barbara, how are you?</orig>
- <trans>嘿,芭芭拉,你好嗎?</trans>
- </sent>
- <sent>
- <orig>How are you? -Quite well, thank you.</orig>
- <trans>你好嗎?-很好,謝謝你。</trans>
- </sent>
- </dict>
經過simplexml_load_string得到如下代碼:
- SimpleXMLElement Object
- (
- [@attributes] => Array
- (
- [num] => 219
- [id] => 219
- [name] => 219
- )
- [key] => 你好www.49028c.com
- [pos] => SimpleXMLElement Object
- (
- )
- [acceptation] => Array;Array;Array;
- [sent] => Array
- (
- [0] => SimpleXMLElement Object
- (
- [orig] => Haven't seen you for a long time. How are you?
- [trans] => 多日不見了,你好嗎?
- )
- [1] => SimpleXMLElement Object
- (
- [orig] => Hello! How are you?
- [trans] => 嘿,你好?
- )
- [2] => SimpleXMLElement Object
- (
- [orig] => Hello, Brooks!How are you?
- [trans] => 喂,布魯克斯!你好嗎?
- )
- [3] => SimpleXMLElement Object
- (
- [orig] => Hi, Barbara, how are you?
- [trans] => 嘿,芭芭拉,你好嗎?
- )
- [4] => SimpleXMLElement Object
- (
- [orig] => How are you? -Quite well, thank you.
- [trans] => 你好嗎?-很好,謝謝你。
- )
- )
- )
我們在PHP語言中可以用以下方法取得我們想要的值,代碼如下:
- <?php
- $data = <<<XML
- <?xml version="1.0" encoding="UTF-8"?>
- <dict num="219" id="219" name="219">
- <key>你好</key>
- <pos></pos>
- <acceptation>Array;Array;Array;</acceptation>
- <sent>
- <orig>Haven't seen you for a long time. How are you?</orig>
- <trans>多日不見了,你好嗎?</trans>
- </sent>
- <sent>
- <orig>Hello! How are you?</orig>
- <trans>嘿,你好?</trans>
- </sent>
- <sent>
- <orig>Hello, Brooks!How are you?</orig>
- <trans>喂,布魯克斯!你好嗎?</trans>
- </sent>
- <sent>
- <orig>Hi, Barbara, how are you?</orig>
- <trans>嘿,芭芭拉,你好嗎?</trans>
- </sent>
- <sent>
- <orig>How are you? -Quite well, thank you.</orig>
- <trans>你好嗎?-很好,謝謝你。</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); //你好
- ?>
新聞熱點
疑難解答