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

您的位置:首頁技術(shù)文章
文章詳情頁

PHP擴(kuò)展之XML操作(三)——XML解析器使用及相關(guān)函數(shù)

瀏覽:2日期:2022-09-16 10:08:38
一、XML 元素結(jié)構(gòu)例程

第一個例程縮進(jìn)顯示文檔中的開始元素結(jié)構(gòu)。

Example #1 顯示 XML 元素結(jié)構(gòu)

<?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 標(biāo)簽映射例程

Example #1 將 XML 映射為 HTML

此例程直接地將 XML 標(biāo)簽映射為 HTML 標(biāo)簽。 在“map_array”中未找到的元素將被忽略。 當(dāng)然,此例程只針對特定的 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;//?如何要解析的文檔是“可信任”的,?則說明可安全//?地執(zhí)行其內(nèi)部的?PHP?代碼。否則,顯示代碼內(nèi)容。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解析器函數(shù)utf8_decode?— 將用 UTF-8 方式編碼的 ISO-8859-1 字符串轉(zhuǎn)換成單字節(jié)的 ISO-8859-1 字符串。utf8_encode?— 將 ISO-8859-1 編碼的字符串轉(zhuǎn)換為 UTF-8 編碼xml_error_string?— 獲取 XML 解析器的錯誤字符串xml_get_current_byte_index?— 獲取 XML 解析器的當(dāng)前字節(jié)索引xml_get_current_column_number?— 獲取 XML 解析器的當(dāng)前列號xml_get_current_line_number?— 獲取 XML 解析器的當(dāng)前行號xml_get_error_code?— 獲取 XML 解析器錯誤代碼xml_parse_into_struct?— 將 XML 數(shù)據(jù)解析到數(shù)組中xml_parse?— 開始解析一個 XML 文檔xml_parser_create_ns?— 生成一個支持命名空間的 XML 解析器xml_parser_create?— 建立一個 XML 解析器xml_parser_free?— 釋放指定的 XML 解析器xml_parser_get_option?— 從 XML 解析器獲取選項設(shè)置信息xml_parser_set_option?— 為指定 XML 解析進(jìn)行選項設(shè)置xml_set_character_data_handler?— 建立字符數(shù)據(jù)處理器xml_set_default_handler?— 建立默認(rèn)處理器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?— 建立未解析實體定義聲明處理器

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 深夜福利视频在线观看免费播放 | 精品久久久久久久九九九精品 | 午夜性刺激免费视频 | 欧美一区高清 | 欧美日韩一区二区在线观看 | 亚洲孕交 | 亚洲成av人片在线观看无码 | 精品久久久中文字幕二区 | 看看免费a一片欧 | 欧美午夜精品一区二区三区 | 国产精品毛片 | 久草在线播放视频 | 欧美在线观看www | 欧美在线观看成人高清视频 | 97婷婷狠狠成人免费视频 | 亚洲视频手机在线 | 国产精品一区二区久久精品 | 国产精品久久久久久久久久直 | 久久久网站亚洲第一 | 一级特黄aaa大片在 一级特黄aaa大片在线观看 | 国产大片线上免费观看 | 性做久久久久免费观看 | 精品欧美日韩一区二区三区 | 国产精品亚洲精品 | 日本一级大毛片a一 | 美女黄网站色一级毛片 | 欧美毛片一级的免费的 | 国产高清厕所盗摄视频 | 免费国产成人α片 | 91九色国产 | 欧美aaaaa| 国产黄色小视频 | 午夜在线观看视频免费 成人 | 中文字幕无线精品乱码一区 | 久久精品视屏 | 成年人免费观看视频网站 | 麻豆md国产在线观看 | 黄色三级理论片 | 黄网站色视频免费观看w | 欧美另类精品 | 日韩精品视频美在线精品视频 |