国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

PHP擴展之XML操作(三)——XML解析器使用及相關函數

瀏覽:2日期:2022-09-16 10:08:38
一、XML 元素結構例程

第一個例程縮進顯示文檔中的開始元素結構。

Example #1 顯示 XML 元素結構

<?php$file?=?'data.xml';$depth?=?array();

function?startElement($parser,?$name,?$attrs){global?$depth;for?($i?=?0;?$i?<?$depth[$parser];?$i++)?{echo?'??';}echo?'$namen';$depth[$parser]++;}

function?endElement($parser,?$name){global?$depth;$depth[$parser]--;}

$xml_parser?=?xml_parser_create();xml_set_element_handler($xml_parser,?'startElement',?'endElement');if?(!($fp?=?fopen($file,?'r')))?{die('could?not?open?XML?input');}

while?($data?=?fread($fp,?4096))?{if?(!xml_parse($xml_parser,?$data,?feof($fp)))?{die(sprintf('XML?error:?%s?at?line?%d',xml_error_string(xml_get_error_code($xml_parser)),xml_get_current_line_number($xml_parser)));}}xml_parser_free($xml_parser);?>二、XML 標簽映射例程

Example #1 將 XML 映射為 HTML

此例程直接地將 XML 標簽映射為 HTML 標簽。 在“map_array”中未找到的元素將被忽略。 當然,此例程只針對特定的 XML 文檔類型起作用。

<?php$file?=?'data.xml';$map_array?=?array('BOLD'?????=>?'B','EMPHASIS'?=>?'I','LITERAL'??=>?'TT');

function?startElement($parser,?$name,?$attrs){global?$map_array;if?(isset($map_array[$name]))?{echo?'<$map_array[$name]>';}}

function?endElement($parser,?$name){global?$map_array;if?(isset($map_array[$name]))?{echo?'</$map_array[$name]>';}}

function?characterData($parser,?$data){echo?$data;}

$xml_parser?=?xml_parser_create();//?use?case-folding?so?we?are?sure?to?find?the?tag?in?$map_arrayxml_parser_set_option($xml_parser,?XML_OPTION_CASE_FOLDING,?true);xml_set_element_handler($xml_parser,?'startElement',?'endElement');xml_set_character_data_handler($xml_parser,?'characterData');if?(!($fp?=?fopen($file,?'r')))?{die('could?not?open?XML?input');}

while?($data?=?fread($fp,?4096))?{if?(!xml_parse($xml_parser,?$data,?feof($fp)))?{die(sprintf('XML?error:?%s?at?line?%d',xml_error_string(xml_get_error_code($xml_parser)),xml_get_current_line_number($xml_parser)));}}xml_parser_free($xml_parser);?>三、XML 外部實體例程

此例程用于加亮 XML 代碼。舉例說明如何使用外部實體引用來包含和解析其他文檔, 及處理指令是如何被處理的,及判斷處理指令所包含代碼是否“可信任”的一種方法

用于此例程的 XML 文檔位于此例程的下方(xmltest.xml?和?xmltest2.xml)。

Example #1 外部實體例程

<?php$file?=?'xmltest.xml';

function?trustedFile($file){//?僅信任本地文件if?(!preg_match('@^([a-z]+)://@i',?$file)&&?fileowner($file)?==?getmyuid())?{return?true;}return?false;}

function?startElement($parser,?$name,?$attribs){echo?'&lt;<font?color='#0000cc'>$name</font>';if?(count($attribs))?{foreach?($attribs?as?$k?=>?$v)?{echo?'?<font?color='#009900'>$k</font>='<fontcolor='#990000'>$v</font>'';}}echo?'&gt;';}

function?endElement($parser,?$name){echo?'&lt;/<font?color='#0000cc'>$name</font>&gt;';}

function?characterData($parser,?$data){echo?'<b>$data</b>';}

function?PIHandler($parser,?$target,?$data){switch?(strtolower($target))?{case?'php':global?$parser_file;//?如何要解析的文檔是“可信任”的,?則說明可安全//?地執行其內部的?PHP?代碼。否則,顯示代碼內容。if?(trustedFile($parser_file[$parser]))?{eval($data);}?else?{printf('Untrusted?PHP?code:?<i>%s</i>',htmlspecialchars($data));}break;}}

function?defaultHandler($parser,?$data){if?(substr($data,?0,?1)?==?'&'?&&?substr($data,?-1,?1)?==?';')?{printf(’<font?color='#aa00aa'>%s</font>’,htmlspecialchars($data));}?else?{printf(’<font?size='-1'>%s</font>’,htmlspecialchars($data));}}

function?externalEntityRefHandler($parser,?$openEntityNames,?$base,?$systemId,$publicId)?{if?($systemId)?{if?(!list($parser,?$fp)?=?new_xml_parser($systemId))?{printf('Could?not?open?entity?%s?at?%sn',?$openEntityNames,$systemId);return?false;}while?($data?=?fread($fp,?4096))?{if?(!xml_parse($parser,?$data,?feof($fp)))?{printf('XML?error:?%s?at?line?%d?while?parsing?entity?%sn',xml_error_string(xml_get_error_code($parser)),xml_get_current_line_number($parser),?$openEntityNames);xml_parser_free($parser);return?false;}}xml_parser_free($parser);return?true;}return?false;}

function?new_xml_parser($file){global?$parser_file;

$xml_parser?=?xml_parser_create();xml_parser_set_option($xml_parser,?XML_OPTION_CASE_FOLDING,?1);xml_set_element_handler($xml_parser,?'startElement',?'endElement');xml_set_character_data_handler($xml_parser,?'characterData');xml_set_processing_instruction_handler($xml_parser,?'PIHandler');xml_set_default_handler($xml_parser,?'defaultHandler');xml_set_external_entity_ref_handler($xml_parser,?'externalEntityRefHandler');

if?(!($fp?=?@fopen($file,?'r')))?{return?false;}if?(!is_array($parser_file))?{settype($parser_file,?'array');}$parser_file[$xml_parser]?=?$file;return?array($xml_parser,?$fp);}

if?(!(list($xml_parser,?$fp)?=?new_xml_parser($file)))?{die('could?not?open?XML?input');}

echo?'<pre>';while?($data?=?fread($fp,?4096))?{if?(!xml_parse($xml_parser,?$data,?feof($fp)))?{die(sprintf('XML?error:?%s?at?line?%dn',xml_error_string(xml_get_error_code($xml_parser)),xml_get_current_line_number($xml_parser)));}}echo?'</pre>';echo?'parse?completen';xml_parser_free($xml_parser);

?>

Example #2 xmltest.xml

<?xml version=’1.0’?><!DOCTYPE chapter SYSTEM '/just/a/test.dtd' [<!ENTITY plainEntity 'FOO entity'><!ENTITY systemEntity SYSTEM 'xmltest2.xml'>]><chapter> <TITLE>Title &plainEntity;</TITLE> <para> <informaltable> <tgroup cols='3'> <tbody> <row><entry>a1</entry><entry morerows='1'>b1</entry><entry>c1</entry></row> <row><entry>a2</entry><entry>c2</entry></row> <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row> </tbody> </tgroup> </informaltable> </para> &systemEntity; <section id='about'> <title>About this Document</title> <para> <!-- this is a comment --> <?php echo ’Hi! This is PHP version ’ . phpversion(); ?> </para> </section></chapter>

此文件包含在?xmltest.xml?中:

Example #3 xmltest2.xml

<?xml version='1.0'?><!DOCTYPE foo [<!ENTITY testEnt 'test entity'>]><foo> <element attrib='value'/> &testEnt; <?php echo 'This is some more PHP code being executed.'; ?></foo>四、XML解析器函數utf8_decode?— 將用 UTF-8 方式編碼的 ISO-8859-1 字符串轉換成單字節的 ISO-8859-1 字符串。utf8_encode?— 將 ISO-8859-1 編碼的字符串轉換為 UTF-8 編碼xml_error_string?— 獲取 XML 解析器的錯誤字符串xml_get_current_byte_index?— 獲取 XML 解析器的當前字節索引xml_get_current_column_number?— 獲取 XML 解析器的當前列號xml_get_current_line_number?— 獲取 XML 解析器的當前行號xml_get_error_code?— 獲取 XML 解析器錯誤代碼xml_parse_into_struct?— 將 XML 數據解析到數組中xml_parse?— 開始解析一個 XML 文檔xml_parser_create_ns?— 生成一個支持命名空間的 XML 解析器xml_parser_create?— 建立一個 XML 解析器xml_parser_free?— 釋放指定的 XML 解析器xml_parser_get_option?— 從 XML 解析器獲取選項設置信息xml_parser_set_option?— 為指定 XML 解析進行選項設置xml_set_character_data_handler?— 建立字符數據處理器xml_set_default_handler?— 建立默認處理器xml_set_element_handler?— 建立起始和終止元素處理器xml_set_end_namespace_decl_handler?— 建立終止命名空間聲明處理器xml_set_external_entity_ref_handler?— 建立外部實體指向處理器xml_set_notation_decl_handler?— 建立注釋聲明處理器xml_set_object?— 在對象中使用 XML 解析器xml_set_processing_instruction_handler?— 建立處理指令(PI)處理器xml_set_start_namespace_decl_handler?— 建立起始命名空間聲明處理器xml_set_unparsed_entity_decl_handler?— 建立未解析實體定義聲明處理器

標簽: PHP
相關文章:
主站蜘蛛池模板: 99久久精品免费观看区一 | 国内精品久久久久影院网站 | a级片在线 | 香蕉久久一区二区不卡无毒影院 | 在线视频 日韩 | 欧美大片一区 | 亚洲精品一区二区三区中文字幕 | 日本黄色大片在线播放视频免费观看 | 国模午夜写真福利视频在线 | 三级视频中文字幕 | 在线播放波多野结衣 | 成年午夜| 欧美另类videosbestsex久久 | 日韩精品无码一区二区三区 | 久久久久久久一线毛片 | 欧美成人综合在线观看视频 | 国产精品国产欧美综合一区 | 国产精品一区二区丝瓜 | 在线视频免费观看a毛片 | 日本午夜高清视频 | 扒开两腿猛进入爽爽视频 | 精品国产精品久久一区免费式 | 欧美大片无尺码在线观看 | 国产亚洲人成网站在线观看 | 免费一级毛片在线播放欧美 | 欧美精品一区二区在线观看播放 | 99久久精品免费精品国产 | 毛片免费全部免费观看 | 免费看国产精品久久久久 | 欧美一级毛片一 | 亚洲精品第一第二区 | 成人久久在线 | 日韩永久在线观看免费视频 | 高清亚洲 | 欧美成人做性视频在线播放 | 国产精品资源手机在线播放 | 性感一级毛片 | 成人免费在线网站 | 亚洲经典在线 | 日韩在线观看一区二区三区 | 亚洲欧美精品成人久久91 |