久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

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

這篇文章主要介紹了PHP封裝的XML簡單操作類,結合完整實例形式分析了php針對xml文件進行載入、讀取及寫入相關操作技巧的封裝與使用方法,需要的朋友可以參考下

本文實例講述了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   存儲節點的屬性列表(只讀)
childNodes   存儲節點的子節點列表(只讀)
dataType   返回此節點的數據類型
Definition   以DTD或XML模式給出的節點的定義(只讀)
Doctype   指定文檔類型節點(只讀)
documentElement   返回文檔的根元素(可讀寫)
firstChild   返回當前節點的第一個子節點(只讀)
Implementation   返回XMLDOMImplementation對象
lastChild   返回當前節點最后一個子節點(只讀)
nextSibling   返回當前節點的下一個兄弟節點(只讀)
nodeName   返回節點的名字(只讀)
nodeType   返回節點的類型(只讀)
nodeTypedValue   存儲節點值(可讀寫)
nodeValue   返回節點的文本(可讀寫)
ownerDocument   返回包含此節點的根文檔(只讀)
parentNode   返回父節點(只讀)
Parsed   返回此節點及其子節點是否已經被解析(只讀)
Prefix   返回名稱空間前綴(只讀)
preserveWhiteSpace   指定是否保留空白(可讀寫)
previousSibling   返回此節點的前一個兄弟節點(只讀)
Text   返回此節點及其后代的文本內容(可讀寫)
url   返回最近載入的XML文檔的URL(只讀)
Xml   返回節點及其后代的XML表示(只讀)
方法:
appendChild   為當前節點添加一個新的子節點,放在最后的子節點后
cloneNode   返回當前節點的拷貝
createAttribute   創建新的屬性
createCDATASection   創建包括給定數據的CDATA段
createComment   創建一個注釋節點
createDocumentFragment   創建DocumentFragment對象
createElement   創建一個元素節點
createEntityReference   創建EntityReference對象
createNode   創建給定類型,名字和命名空間的節點
createPorcessingInstruction   創建操作指令節點
createTextNode   創建包括給定數據的文本節點
getElementsByTagName   返回指定名字的元素集合
hasChildNodes   返回當前節點是否有子節點
insertBefore   在指定節點前插入子節點
Load   導入指定位置的XML文檔
loadXML   導入指定字符串的XML文檔
removeChild   從子結點列表中刪除指定的子節點
replaceChild   從子節點列表中替換指定的子節點
Save   把XML文件存到指定節點
selectNodes   對節點進行指定的匹配,并返回匹配節點列表
selectSingleNode   對節點進行指定的匹配,并返回第一個匹配節點
transformNode   使用指定的樣式表對節點及其后代進行轉換
 *
 */
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])) // 發現有重復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;
    }
  }
}

簡單用法示例如下:

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結合實例形式分析了php實現針對有序表插值查找的相關操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現服務端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現的多維數組排序算法,結合實例形式對比分析了php針對多維數組及帶有鍵名的多維數組進行排序相關操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結合ajaxuploadfile實現無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
主站蜘蛛池模板: 精品国产第一区二区三区 | 欧美激情一区 | 九九热精品在线视频 | 久久久久欧美 | 欧美一级在线观看 | 日韩精品中文字幕在线 | 国产欧美精品 | 国产免费一区二区三区网站免费 | 国产一区二区三区四区hd | 一级毛片免费完整视频 | 国产日韩欧美激情 | 亚洲成人综合网站 | 一级黄色生活视频 | 欧美一级片黄色 | 干狠狠| 一区二区成人在线 | 精品美女视频在免费观看 | 中文字幕av第一页 | 九九九精品视频 | 欧美视频 亚洲视频 | 久久亚洲一区 | 国产成人精品一区二区三区在线 | 久久尤物免费一区二区三区 | 青草青草久热精品视频在线观看 | 久久爱综合| 欧美视频在线播放 | 免费在线视频一区二区 | 久久久久九九九九 | 中文字幕精品一区二区三区精品 | 91精品国产综合久久婷婷香蕉 | 亚洲精品www久久久久久广东 | 亚洲一区二区三区桃乃木香奈 | 日韩在线欧美 | 国产精品久久久久久久久大全 | 免费看欧美一级片 | 欧美亚洲视频 | 久久亚| 国产精品欧美大片 | 欧美精三区欧美精三区 | 精品一区二区三区在线观看 | 国产区在线观看 |