电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP 和 XML: 使用expat函數(二)

瀏覽:23日期:2023-12-15 08:28:18
;PHP 和 XML: 使用expat函數(二)讓我們看一下實際處理這個文檔的PHP代碼。 /*NewsBoy : News system for the web written in PHP by Justin Grant (Web: jusgrant.cjb.net or justin.host.za.net Mail: justin@glendale.net)25 March V0.0.2 Converted Newsboy to a PHP class, allowing the layout to be easily modified. Also added made the HTML that is genrated a little easier to read.24 March V0.0.1 Just completed the intial version, very rough and basic.*/ class newsboy { var $xml_parser; var $xml_file; var $html; var $open_tag ; var $close_tag ; //Class Constructor function newsboy() { $this->xml_parser = ""$this->xml_file = ""$this->html = ""$this->open_tag = array( //these are the default settings but they are quite easy to modify "NEWSBOY" => "nn", "STORY" => " ", "DATE" => "", "SLUG" => " ", "TEXT" => "", "PIC" => "", "NEWLINE" => "" ); $this->close_tag = array( "NEWSBOY" => " nnn", "STORY" => "", "DATE" => "", "SLUG" => " ", "TEXT" => "n", "PIC" => " " " ); } //Class Destructor (has to be invoked manually as PHP does not support destructors) function destroy() { xml_parser_free($this->xml_parser); } //Class Members function concat($str) { $this->html .= $str; } function startElement($parser, $name, $attrs) { //global $open_tag; if ($format= $this->open_tag[$name]) { $this->html .= $format; } } function endElement($parser, $name) { global $close_tag; if ($format= $this->close_tag[$name]) { $this->html .= $format; } } function characterData($parser, $data) { $this->html .= $data; } /* function PIHandler($parser, $target, $data) { //switch (strtolower($target)){ // case "php": eval($data); // break; //} }*/ function parse() { $this->xml_parser = xml_parser_create(); xml_set_object($this->xml_parser, &$this); // use case-folding so we are sure to find the tag in $map_array xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, true); xml_set_element_handler($this->xml_parser, "startElement", "endElement"); xml_set_character_data_handler($this->xml_parser, "characterData");//xml_set_processing_instruction_handler($this->xml_parser, "PIHandler"); if (!($fp = fopen($this->xml_file, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($this->xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_parser)), xml_get_current_line_number($this->xml_parser))); } } }} ?> -------------------------------------------------------------------------------- 在這個類的構造函數中,我創建了打開與關閉兩個標記數組。數組的關鍵字與我后面將要分析的標記是 一樣的,并且它們相應的值包含格式化打開與關閉標記的HTML代碼。 我定義了一個簡單的類析構函數用來當我們不再需要它時釋放XML 分析器。這個函數不得不手工調用, 因為PHP不支持當一個對象釋放時自動調用類的析構函數。 然后我定義了在XML文檔中用來分析打開和關閉標記的主回調方法。我也定義了一個數據分析方法, 將 用于當打開和關閉標記中有數據時,對數據進行簡單的格式化,后面我將向你演示如何將這些回調方法注冊 到分析器中。 在startElement和closeElement(當分析到一個打開或關閉標專時被分別調用)中使用 標記的名字 作為索引鍵值對相應的數組進行查詢。如果那個鍵值存在,則返回值并且追加到類的'html' 屬性的后面。 'html'屬性將在以后我們真正顯示文檔內容的時候使用。 characterData方法簡單地將標記之間的值加到類的html屬性的后面。 被注釋起來的叫PIHandler的方法是一個回調函數,我還未曾實現它。如果它存在的話,它將直接在XML 文檔中處理php腳本。 現在,讓我解釋一下主要的分析方法的調用,你猜一猜,parse()!!! 第一行調用了函數xml_parser_create(),它將返回一個expat的xml分析器的實例,并且被保存在類的 屬性&this->xml_parser中。 下一步,我們需要用函數xml_set_object()來注冊一個類方法的回調函數。 我是這樣使用的,xml_set_object($this->xml_parser, &$this)。我在第一個參數中指定了用 來保存xml 分析器的類屬性,然后在第二個參數,我指定了PHP對象的實例地址。這個可以讓分析器 知道全 部將要注冊的回調函數,是在那個地址上指定類的實際的方法。這就象c或c++中的一個'引用傳遞',也有人 簡單地叫做'引用變量'。 在下一行,我調用了xml_parser_set_option()設置了一個xml分析器的屬性,使用大小寫折疊( case folding)。大小寫折疊只是告訴分析器知道,當我分析我的XML文檔時我并不關心大小寫敏感,但是 如果你 想使用大小寫敏感來定義兩個不同的標記,如或,你可以不設置它。 通過使用xml_set_element_handler(),我指定了用于開始和結束標記的回調函數,名字是 "startElement"和"endElement"。 接著,我使用xml_set_character_data_handler()來指定字符數據的處理句柄為名為 characterData()的回調函數。被注釋的函數調用,xml_set_processing_instruction_handler(), 是一個我用于注冊函數 PIHandler()的調用。PIHandler可以被包括在XML文檔中處理php代碼。 其它的代碼只是很簡單地讀XML文件并且分析它。如果一個錯誤發生,那么錯誤明細將返回,包括錯誤 發生的行號。;;
標簽: PHP
主站蜘蛛池模板: 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 复合肥,化肥厂,复合肥批发,化肥代理,复合肥品牌-红四方 | 电销卡_北京电销卡_包月电话卡-豪付网络 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 回转支承-转盘轴承-回转驱动生产厂家-洛阳隆达轴承有限公司 | 金库门,金库房,金库门厂家,金库门价格-河北特旺柜业有限公司 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 南京交通事故律师-专打交通事故的南京律师 | 传动滚筒,改向滚筒-淄博建凯机械科技有限公司 | 上海橡胶接头_弹簧减震器_金属软接头厂家-上海淞江集团 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 真石漆,山东真石漆,真石漆厂家,真石漆价格-山东新佳涂料有限公司 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 新能源汽车电机定转子合装机 - 电机维修设备 - 睿望达 | 智能气瓶柜(大型气瓶储存柜)百科 | 过跨车_过跨电瓶车_过跨转运车_横移电动平车_厂区转运车_无轨转运车 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 全自动不干胶贴标机_套标机-上海今昂贴标机生产厂家 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 找果网 | 苹果手机找回方法,苹果iPhone手机丢了找回,认准找果网! | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 期货软件-专业期货分析软件下载-云智赢 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 | 管家婆-管家婆软件-管家婆辉煌-管家婆进销存-管家婆工贸ERP | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 |