Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

08 tháng 6, 2012

Xử lý XML trong PHP.

Để phân tích một nội dung XML ta dùng hàm:
simplexml_load_string($xml_string);
Hàm này sẽ phân tích nội dung XML trong chuỗi thành các Object.
Để truy cập vào các element của XML ta dùng hàm children như sau:
$data->item->children(uri);
Trong đó uri có thể có hoặc không, đó là một namespace trong xml.
Hàm này sẽ phân tích các element trong xml thành các array.
Từ đây ta sẽ dùng foreach để tiếp tục xử lý cho các attribute trong các element.
Có 2 dạng foreach:

  • foreach($d as $v): dùng để lấy các giá trị trong mảng $d
  • foreach($d as $k => $v:): dùng để lấy cả key và giá trị trong mảng $d
Xem ví dụ sau:
Array ( 
 [condition] => Array ( 
  [text] => SimpleXMLElement Object ( [0] => Partly Cloudy )
  [code] => SimpleXMLElement Object ( [0] => 30 )
  [temp] => SimpleXMLElement Object ( [0] => 79 )
  [date] => SimpleXMLElement Object ( [0] => Mon, 07 Jul 2008 9:54 am EDT )
 )

 [forecast] => Array ( 
  [Mon] => Array ( 
   [day] => SimpleXMLElement Object ( [0] => Mon )
   [date] => SimpleXMLElement Object ( [0] => 7 Jul 2008 )
   [low] => SimpleXMLElement Object ( [0] => 69 )
   [high] => SimpleXMLElement Object ( [0] => 87 )
   [text] => SimpleXMLElement Object ( [0] => Isolated Thunderstorms )
   [code] => SimpleXMLElement Object ( [0] => 37 )
  )

  [Tue] => Array ( 
   [day] => SimpleXMLElement Object ( [0] => Tue )
   [date] => SimpleXMLElement Object ( [0] => 8 Jul 2008 )
   [low] => SimpleXMLElement Object ( [0] => 71 )
   [high] => SimpleXMLElement Object ( [0] => 90 )
   [text] => SimpleXMLElement Object ( [0] => Isolated Thunderstorms )
   [code] => SimpleXMLElement Object ( [0] => 37 ) 
  ) 
 ) 
)
Trong ví dụ nếu coi mảng to nhất là $d, ta sẽ có như sau:
foreach($d as $v)
thì $v sẽ là các mảng con bên trong $d.
foreach($d as $k => $v)
thì $k sẽ là 2 string 'condition' hoặc 'forecast'
còn $v sẽ là các mảng có khóa là 'condition' hoặc 'forecast'
như vậy nếu muốn tiếp tục truy cập vào sâu thêm ta sẽ dùng
foreach($v as $v1)
....