婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP封裝的XML簡單操作類完整實例

PHP封裝的XML簡單操作類完整實例

熱門標簽:全國各省地圖標注點 周口網絡回撥外呼系統(tǒng) 外呼系統(tǒng)人工客服 商丘外呼系統(tǒng)好處 網絡電話400申請 福建高頻外呼防封系統(tǒng)哪家好 百度地圖標注類型是酒店 400電話申請辦理 隨州銷售電銷機器人公司

本文實例講述了PHP封裝的XML簡單操作類。分享給大家供大家參考,具體如下:

xml_dom.php封裝類文件:

?php
/**
 * Class xml_dom
 *
nodeType:
1 XML_ELEMENT_NODE(元素類型)
2 XML_ATTRIBUTE_NODE
3 XML_TEXT_NODE
4 XML_CDATA_SECTION_NODE
5 XML_ENTITY_REFERENCE_NODE
6 XML_ENTITY_NODE
7 XML_PROCESSING_INSTRUCTION_NODE
8 XML_COMMENT_NODE(注釋類型)
9 XML_DOCUMENT_NODE
10 XML_DOCUMENT_TYPE_NODE
11 XML_DOCUMENT_FRAGMENT_NODE
12 XML_NOTATION_NODE
 *
PHP DOMDocument操作:
屬性:
Attributes   存儲節(jié)點的屬性列表(只讀)
childNodes   存儲節(jié)點的子節(jié)點列表(只讀)
dataType   返回此節(jié)點的數據類型
Definition   以DTD或XML模式給出的節(jié)點的定義(只讀)
Doctype   指定文檔類型節(jié)點(只讀)
documentElement   返回文檔的根元素(可讀寫)
firstChild   返回當前節(jié)點的第一個子節(jié)點(只讀)
Implementation   返回XMLDOMImplementation對象
lastChild   返回當前節(jié)點最后一個子節(jié)點(只讀)
nextSibling   返回當前節(jié)點的下一個兄弟節(jié)點(只讀)
nodeName   返回節(jié)點的名字(只讀)
nodeType   返回節(jié)點的類型(只讀)
nodeTypedValue   存儲節(jié)點值(可讀寫)
nodeValue   返回節(jié)點的文本(可讀寫)
ownerDocument   返回包含此節(jié)點的根文檔(只讀)
parentNode   返回父節(jié)點(只讀)
Parsed   返回此節(jié)點及其子節(jié)點是否已經被解析(只讀)
Prefix   返回名稱空間前綴(只讀)
preserveWhiteSpace   指定是否保留空白(可讀寫)
previousSibling   返回此節(jié)點的前一個兄弟節(jié)點(只讀)
Text   返回此節(jié)點及其后代的文本內容(可讀寫)
url   返回最近載入的XML文檔的URL(只讀)
Xml   返回節(jié)點及其后代的XML表示(只讀)
方法:
appendChild   為當前節(jié)點添加一個新的子節(jié)點,放在最后的子節(jié)點后
cloneNode   返回當前節(jié)點的拷貝
createAttribute   創(chuàng)建新的屬性
createCDATASection   創(chuàng)建包括給定數據的CDATA段
createComment   創(chuàng)建一個注釋節(jié)點
createDocumentFragment   創(chuàng)建DocumentFragment對象
createElement   創(chuàng)建一個元素節(jié)點
createEntityReference   創(chuàng)建EntityReference對象
createNode   創(chuàng)建給定類型,名字和命名空間的節(jié)點
createPorcessingInstruction   創(chuàng)建操作指令節(jié)點
createTextNode   創(chuàng)建包括給定數據的文本節(jié)點
getElementsByTagName   返回指定名字的元素集合
hasChildNodes   返回當前節(jié)點是否有子節(jié)點
insertBefore   在指定節(jié)點前插入子節(jié)點
Load   導入指定位置的XML文檔
loadXML   導入指定字符串的XML文檔
removeChild   從子結點列表中刪除指定的子節(jié)點
replaceChild   從子節(jié)點列表中替換指定的子節(jié)點
Save   把XML文件存到指定節(jié)點
selectNodes   對節(jié)點進行指定的匹配,并返回匹配節(jié)點列表
selectSingleNode   對節(jié)點進行指定的匹配,并返回第一個匹配節(jié)點
transformNode   使用指定的樣式表對節(jié)點及其后代進行轉換
 *
 */
class xml_dom
{
  protected $dblink; // xml連接
  protected $dbfile; // xml文件路徑
  /**
   * xml文件 構造類
   * @param $db_file xml文件
   */
  public function __construct($db_file)
  {
    $this->dbfile = $db_file;
    if(!file_exists($db_file))
    {
//     die('未找到數據庫文件');
      $this->dblink = new DOMDocument('1.0', 'utf-8');
      $root = $this->dblink->createElement('root');
      $this->dblink->appendChild($root);
      $this->dblink->formatOutput = true;  // xml文件保留縮進樣式
      $this->dblink->save($this->dbfile);
    }
    else
    {
      $this->dblink = new DOMDocument();
      $this->dblink->formatOutput = true;
      $this->dblink->load($this->dbfile);
    }
  }
  /**
   * 遍歷所有元素
   * ===============================================
   * 標準xml文件,一個元素可能有n個屬性,可用自定義鍵[nodevalue]獲取元素值
   * ?xml version="1.0" encoding="utf-8"?>
   * table name="posts">
   *   column name="id">1/column>
   *   column name="title">標題一/column>
   *   column name="content">詳細內容一/column>
   * /table>
   * ===============================================
   * 簡單xml文件,沒有屬性,鍵值一一對應
   * ?xml version="1.0" encoding="utf-8"?>
   * root>
   *   posts>
   *     id>1/id>
   *     title>標題一/title>
   *     content>詳細內容一/content>
   *   /posts>
   * /root>
   * @param $node
   * @return array
   */
  function getData($node=0){
    if(!$node)
    {
      $node = $this->dblink->documentElement;
    }
    $array = array();
    foreach($node->attributes as $attribute)
    {
      $key = $attribute->nodeName;
      $val = $attribute->nodeValue;
      $array[$key] = $val;
    }
    if(count($array))  // 有屬性,則用[nodevalue]鍵代表值
    {
      $array['nodevalue'] = $node->nodeValue;
    }
    // 遞歸遍歷所有子元素
    $node_child = $node->firstChild;
    while($node_child)
    {
      if(XML_ELEMENT_NODE == $node_child->nodeType)
      {
        $tagname = $node_child->tagName;
        $result = $this->getData($node_child);
        if(isset($array[$tagname])) // 發(fā)現有重復tagName的子元素存在,所以改用數組存儲重復tagName的所有子元素
        {
          if(!is_array($array[$tagname][0]))
          {
            $tmp = $array[$tagname];
            $array[$tagname] = array();
            $array[$tagname][] = $tmp;
          }
          $array[$tagname][] = $result;
        }
        else
        {
          $array[$tagname] = $result;
        }
      }
      $node_child = $node_child->nextSibling;
    }
    if(!count($array)) // 沒有子元素沒有屬性=最末子元素,就返回該元素的nodeValue值
    {
      return $node->nodeValue;
    }
    return $array;
  }
  /**
   * 把array數據寫到xml文件(覆蓋)
   * @param $data
   */
  public function setData($data,$node=0)
  {
    $is_root = false;
    if(!$node)
    {
      $is_root = true;
      $node = $this->dblink->documentElement;
      // 清除原數據
      $remove = array();
      $node_child = $node->firstChild;
      while($node_child)
      {
        $remove[] = $node_child;
        $node_child = $node_child->nextSibling;
      }
      foreach($remove as $r)
      {
        $node->removeChild($r);
      }
    }
    if(is_array($data))
    {
      foreach($data as $k=>$v)
      {
        if(is_array($v))
        {
          foreach($v as $r)
          {
            $item = $this->dblink->createElement($k);
            $result = $this->setData($r,$item);
            $node->appendChild($result);
          }
        }
        else
        {
          $item = $this->dblink->createElement($k);
          $value = $this->dblink->createTextNode($v);
          $item->appendChild($value);
          $node->appendChild($item);
        }
      }
    }
    else
    {
      $item = $this->dblink->createTextNode($data);
      $node->appendChild($item);
    }
    if($is_root)
    {
      $this->dblink->save($this->dbfile);  // 覆蓋寫入
    }
    else
    {
      return $node;
    }
  }
}

簡單用法示例如下:

smp.xml文件:

?xml version="1.0" encoding="utf-8"?>
root>
   posts>
     id>1/id>
     title>標題一/title>
     content>詳細內容一/content>
   /posts>
   posts>
     id>2/id>
     title>標題二/title>
     content>詳細內容二/content>
   /posts>
   posts>
     id>3/id>
     title>標題三/title>
     content>詳細內容三/content>
   /posts>
/root>

index.php文件:

include("xml_dom.php");
$xml=new xml_dom("smp.xml");//載入xml文件
$xmlarr=$xml->getData();//讀取xml文件內容
var_dump($xmlarr);

運行結果:

array(1) {
 ["posts"]=>
 array(3) {
  [0]=>
  array(3) {
   ["id"]=>
   string(1) "1"
   ["title"]=>
   string(9) "標題一"
   ["content"]=>
   string(15) "詳細內容一"
  }
  [1]=>
  array(3) {
   ["id"]=>
   string(1) "2"
   ["title"]=>
   string(9) "標題二"
   ["content"]=>
   string(15) "詳細內容二"
  }
  [2]=>
  array(3) {
   ["id"]=>
   string(1) "3"
   ["title"]=>
   string(9) "標題三"
   ["content"]=>
   string(15) "詳細內容三"
  }
 }
}

PS:這里再為大家提供幾款關于xml操作的在線工具供大家參考使用:

在線XML/JSON互相轉換工具:
http://tools.jb51.net/code/xmljson

在線格式化XML/在線壓縮XML
http://tools.jb51.net/code/xmlformat

XML在線壓縮/格式化工具:
http://tools.jb51.net/code/xml_format_compress

XML代碼在線格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP針對XML文件操作技巧總結》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《PHP錯誤與異常處理方法總結》、《PHP基本語法入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • php+Ajax處理xml與json格式數據的方法示例
  • PHP以json或xml格式返回請求數據的方法
  • php實現xml與json之間的相互轉換功能實例
  • PHP生成json和xml類型接口數據格式
  • PHP實現返回JSON和XML的類分享
  • php json與xml序列化/反序列化
  • php 備份數據庫代碼(生成word,excel,json,xml,sql)
  • PHP數組生成XML格式數據的封裝類實例
  • php封裝json通信接口詳解及實例
  • PHP封裝返回Ajax字符串和JSON數組的方法
  • PHP封裝XML和JSON格式數據接口操作示例

標簽:海南 佛山 六安 迪慶 定西 南寧 十堰 樂山

巨人網絡通訊聲明:本文標題《PHP封裝的XML簡單操作類完整實例》,本文關鍵詞  PHP,封,裝的,XML,簡單,操作,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP封裝的XML簡單操作類完整實例》相關的同類信息!
  • 本頁收集關于PHP封裝的XML簡單操作類完整實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 景宁| 万州区| 莒南县| 财经| 延吉市| 嘉兴市| 富平县| 桐庐县| 龙南县| 都昌县| 墨竹工卡县| 巴彦县| 洞口县| 阿拉善左旗| 民丰县| 湟中县| 尼木县| 新化县| 湘西| 南城县| 海原县| 贵港市| 达州市| 应城市| 通州市| 江都市| 八宿县| 霍山县| 宁夏| 桃源县| 土默特右旗| 华坪县| 云梦县| 射阳县| 曲沃县| 焉耆| 米脂县| 广饶县| 辰溪县| 金寨县| 洪泽县|