PHP 可以使用 simplexml_load_string、simplexml_load_file 來解析 XML, 以取得內容.
程式 與 XML 內容
<?php
$string = <<<XML
<?xml version='1.0'?>
<document responsecode="200">
<result count="10" start="0" totalhits="133047950">
<title>Test</title>
<from>Jon</from>
<to>Tsung</to>
</result>
</document>
XML;
$xml = simplexml_load_string($string);
print_r($xml);
?>
XML 解析 的 內容會回傳一個物件
SimpleXMLElement Object
(
[@attributes] => Array
(
[responsecode] => 200
)
[result] => SimpleXMLElement Object
(
[@attributes] => Array
(
[count] => 10
[start] => 0
[totalhits] => 13304
)
[title] => Test
[from] => Jon
[to] => Tsung
)
)
如何取用此物件回傳的值
取得 result 下的 title
- $xml->result->title; // Test (object)
- 建議: (string)$xml->result->title; // 強迫轉換成字串
取得屬性的值(@attributes)
- $xml->result->attributes()->totalhits; // 13304 (object), 一樣建議於前面加 (string)
- 或
- $result_attr = $xml->result->attributes();
$result_attr['totalhits']; // 13304 (object), 一樣建議於前面加 (string)
像是 $xml->result->title; 取回的資料會是 SimpleXML 的物件..並非 String 或是 Int ...
有時候在傳入其他參數或是 mysql 的時候, 最好要強迫型態轉換.
感恩, 我沒注意到居然是 object, 馬上補上~ 🙂
您好:
我可以請教您一個關於如何將xml的資料,匯入mysql的資料庫的問題嗎?
把 XML parse 成 array, 再寫個 foreach 寫入 MySQL 就好了呀. 🙂
您好:
如果,我可以給我將檔案寄給您,您可以幫我將如何做,才能把這個xml檔,匯入sql的的操作說明,錄製成操作錄影檔嗎?
需要多少費用?
我的msn:[email protected]
skype:ut5553616 富爸爸水電工
你先寄一部份 XML 和要 匯入DB 的 schema 給我看看?
順便問問這個的用途是? 商用? or ?
我先把xml寄給您。
我是要做商品目錄,做成產品鏈結,幫廠商賣產品,賣出去就可以抽佣金。(類似通路王)
因為,廠商的產品太多了,而且廠商有提供xml檔。
至於資料庫,因為,我目前是用osc的。
如果,用osc的不好做,可以另外開一個新的資料庫。
Blog 左邊列有 My Mail, 可以先寄一些讓我看看, 還有要對應哪些欄位等等.
您好~我想請教
如果我透過post的方式取得遠端xml的值 然後使用
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3); //times out after 4s
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
$result=curl_exec($ch);
print_r($result);
的方式
輸出的值會是 張先生[email protected]台北市松山區......這樣黏在一起
請問我該如何各別取得變數植呢?
例如 $name="張先生";
$email="[email protected]";
不知道前輩是不是可以幫我解答?
感謝
依照你最前面講得 "取得遠端xml的值", 那你現在的 $result 應該是 XML, 而不是連在一起的字串.
print_r(simplexml_load_string($result));
就可以了. 🙂
前輩 使用了您說的方法 是可以列出所有的值 如下列
SimpleXMLElement Object ( [errorCode] => SimpleXMLElement Object ( ) [userLoginStatus] => true [userAccount] => [email protected] [userId] => 127081 [userName] => 張先生 [userNickname] => chung [userTel] => 02-27658888 [userMobile] => 0920-555-265
但如果我想要取得單獨欄位值我該怎麼下指令
例如我只想要得到[userNickname]
抱歉問了好像很笨的問題...
但還有希望前輩能夠給予指導
不勝感激
$x = simple...($result);
echo $x->userNickname;
這些已經是基本能力了, 建議您在加強點基礎. 🙂
謝謝前輩...我會的..感謝
再次謝謝前輩~
对象直接转换为数组
/**
* [analyzeResult description]
* @param [type] $xmlString [description]
* @return [type] [description]
*/
public static function analyzeResult($xmlObject)
{
$xmlArray = (array)$xmlObject;
if(empty($xmlArray)){
return '';
}
$data = array();
foreach ($xmlArray as $key => $value) {
if(!is_string($value)){
$data[$key] = self::analyzeResult($value);
}else{
$data[$key] = $value;
}
}
return $data;
}
感謝提供~ 🙂