Xml.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace WY\app\libs;
  3. if (!defined('WY_ROOT')) {
  4. exit;
  5. }
  6. class Xml
  7. {
  8. static $version = '1.0';
  9. static $encoding = 'UTF-8';
  10. /*** 将数据转为XML*/
  11. public static function toXml($array)
  12. {
  13. $xml = '<xml>';
  14. foreach ($array as $k => $v) {
  15. $xml .= '<' . $k . '><![CDATA[' . $v . ']]></' . $k . '>';
  16. }
  17. $xml .= '</xml>';
  18. return $xml;
  19. }
  20. public static function parseXml($xmlSrc)
  21. {
  22. if (empty($xmlSrc)) {
  23. return false;
  24. }
  25. $array = array();
  26. $xml = simplexml_load_string($xmlSrc);
  27. $encode = Xml::getXmlEncode($xmlSrc);
  28. if ($xml && $xml->children()) {
  29. foreach ($xml->children() as $node) {
  30. if ($node->children()) {
  31. $k = $node->getName();
  32. $nodeXml = $node->asXML();
  33. $v = substr($nodeXml, strlen($k) + 2, strlen($nodeXml) - 2 * strlen($k) - 5);
  34. } else {
  35. $k = $node->getName();
  36. $v = (string) $node;
  37. }
  38. if ($encode != "" && $encode != "UTF-8") {
  39. $k = iconv("UTF-8", $encode, $k);
  40. $v = iconv("UTF-8", $encode, $v);
  41. }
  42. $array[$k] = $v;
  43. }
  44. }
  45. return $array;
  46. }
  47. static function getXmlEncode($xml)
  48. {
  49. $ret = preg_match("/<?xml[^>]* encoding=\"(.*)\" [^>]* ?>/i", $xml, $arr);
  50. if ($ret) {
  51. return strtoupper($arr[1]);
  52. } else {
  53. return "";
  54. }
  55. }
  56. }
  57. ?>