国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-05 00:01:03
字體:
來源:轉載
供稿:網友

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

xml_dom.php封裝類文件:

<?php/** * Class xml_dom *nodeType:1 XML_ELEMENT_NODE(元素類型)2 XML_ATTRIBUTE_NODE3 XML_TEXT_NODE4 XML_CDATA_SECTION_NODE5 XML_ENTITY_REFERENCE_NODE6 XML_ENTITY_NODE7 XML_PROCESSING_INSTRUCTION_NODE8 XML_COMMENT_NODE(注釋類型)9 XML_DOCUMENT_NODE10 XML_DOCUMENT_TYPE_NODE11 XML_DOCUMENT_FRAGMENT_NODE12 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;    }  }}

簡單用法示例如下:

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) "詳細內容三"  } }}

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


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 高雄县| 镇沅| 汨罗市| 庄河市| 修武县| 漳浦县| 杭锦旗| 察隅县| 马公市| 丰宁| 肇州县| 昌邑市| 昂仁县| 平安县| 南和县| 宝坻区| 德令哈市| 九龙县| 临桂县| 乐安县| 安国市| 都昌县| 西乌| 伊吾县| 崇明县| 泗水县| 凤山县| 陆良县| 江安县| 长寿区| 平昌县| 桑日县| 类乌齐县| 密山市| 天全县| 民和| 高淳县| 聊城市| 竹山县| 鹤峰县| 聂拉木县|