原创的噢_php基础_脚本之家,Parser函数应用实例

// 本人不熟悉XML,可能注解对XML的描述有误//
这只是个思想,要实现的话应该略加修整,可以把一些不常用条件查询的数据用XML保存//
如虚拟社区的
用户资料,一般只有用户自己或其他用户指定了他的USERNAME才会显示//
剩下每次都要开启、查询、解释数据集、关闭数据库的消耗。define.chr;class
DATA_XML //关键!!!一个自定义类{var $parser; //XML解释器var $tags;
//XML标签var $on; //var $root; // 根元素var $Data = array(); //
元素数组function DATA_XML //类初始函数
filename文件名,root根元素{$this->root = $root; //
初始根元素$this->parser =
xml_parser_create();//创建解释对象xml_set_object(&$this->parser,&$this);//设置对象xml_set_element_handler($this->parser,”tag_on”,”tag_off”);//设置元素管理函数xml_set_character_data_handler($this->parser,”getdata”);
//设置数据管理事件xml_parser_set_option($this->parser,
XML_OPTION_CASE_FOLDING, 0);//要求严格区分大小写if( file_exists
//找到文件吗?{//找到$fp = fopen; // 只读打开$c= fread($fp,filesize;
//读取数据fclose;//关闭$this->parse; //设置解释对象}else{echo
“ooooo”; //!?!好象是调试时用的,去掉 else好了}}function
parse//解释函数{xml_parse; }function
tag_on($parser,$tag,$attributes)//发现元素触发函数{$this->on = true;
// 已经触发过$this->tags = $tag;//echo $tag;}function tag_off
//元素结素函数{$this->on = false; // 元素结素}function getdata
//取出元素{if($this->on &&
$this->tags!=$this->root){//验证一下比较好,$this->Data[$this->tags]=trim;//
关键啊!!用标签做数组表,并给这个数组元素付上数据//echo trim;//echo
$this->tags;//echo “n”;}}function
check{//检查字符if//如果是空字符return ‘ ‘;//返回 ‘ ‘elsereturn
$str;//否则原路返回}function saveas//另存为{$c=’

xml 函数是 php 核心的组成部分。无需安装即可使用这些函数。
php xml parser 函数
php:指示支持该函数的最早的 php 版本。

‘.enter;//这个不用说了吧,enter是define.chr;$c.=”root.”>”.enter;//首先设定一下根元素for;$i=key;next{//开始举出所有数据啦$c.=
“”.$this->check.””.$i.”>”.enter;//
用数组表名做元素标签,并加上数据内容} //echo
$c;$c.=””.$this->root.”>”.enter;//结束标签$fp =
fopen;//写入文件fwrite;}};/*新键一个XML文件$xml = new
DATA_XML(路径.”arm.xml”,”DATA”/*根元素*/);$xml->Data[“UserName”]=”关羽”;$xml->Data[“Nick”]=”关云长”;$xml->saveas;unset;//
读取一个文件$xml = new DATA_XML;echo
$xml->Data[“Nick”];//显示一下?$xml->Data[“Nick”]=”关老爷”;//UPDATE$xml->Data[“Master”]=”刘备”;//INSERT
INTO$xml->saveas;//另存为覆盖本身*/?>

函数 描述 php
utf8_decode() 把 utf-8 字符串解码为 iso-8859-1。 3
utf8_encode() 把 iso-8859-1 字符串编码为 utf-8。 3
xml_error_string() 获取 xml 解析器的错误描述。 3
xml_get_current_byte_index() 获取 xml 解析器的当前字节索引。 3
xml_get_current_column_number() 获取 xml 解析器的当前列号。 3
xml_get_current_line_number() 获取 xml 解析器的当前行号。 3
xml_get_error_code() 获取 xml 解析器错误代码。 3
xml_parse() 解析 xml 文档。 3
xml_parse_into_struct() 把 xml 数据解析到数组中。 3
xml_parser_create_ns() 创建带有命名空间支持的 xml 解析器。 4
xml_parser_create() 创建 xml 解析器。 3
xml_parser_free() 释放 xml 解析器。 3
xml_parser_get_option() 从 xml 解析器获取选项设置信息。 3
xml_parser_set_bwin必赢棋牌,option() 为 xml 解析进行选项设置。 3
xml_set_character_data_handler() 建立字符数据处理器。 3
xml_set_default_handler() 建立默认的数据处理器。 3
xml_set_element_handler() 建立起始和终止元素处理器。 3
xml_set_end_namespace_decl_handler() 建立终止命名空间声明处理器。
4
xml_set_external_entity_ref_handler() 建立外部实体处理器。 3
xml_set_notation_decl_handler() 建立注释声明处理器。 3
xml_set_object() 在对象中使用 xml 解析器。 4
xml_set_processing_instruction_handler() 建立处理指令(pi)处理器。
3
xml_set_start_namespace_decl_handler() 建立起始命名空间声明处理器。
4
xml_set_unparsed_entity_decl_handler()
建立未解析实体定义声明处理器。 3

*/
$file=”test.xml”;            //定义xml文件
$character_data_on=false;         //定义布尔变量
$tag_complete=true;           //定义布尔变量
function startelement($parser,$name,$attrs)       //定义起始回调函数
{
  global $character_data_on;
  global $tag_complete;
  echo “<<font color=”#0000cc”>$name</font>”;
  if (sizeof($attrs))
  {
    while(list($k,$v)=each($attrs))
    {
      echo “<font
color=”#009900″>$k</font>=”<fontcolor=”#990000″>$v</font>””;
    }
  }
  $tag_complete=false;          //定义布尔型变量
  $character_data_on=false;         //定义布尔型变量
}
function endelement($parser,$name)       //定义终止回调函数
{
  global $fp;
  global $character_data_on;
  global $tag_complete;
  if(!$character_data_on)
  {
    $temp_fp=ftell($fp);
   
$end_element_byte_index=xml_get_current_byte_index($parser);
    fseek($fp,$end_element_byte_index-2);
    $validator=fgets($fp,3);
    fseek($fp,$temp_fp);
    if($validator==”/>”)
    {
      echo ” /&gt”;
    }
    else echo “&gt&lt/<font
color=”#0000cc”>$name</font>&gt”;
    $tag_complete = true;
  }
  else echo “&lt/<font color=”#0000cc”>$name</font>&gt”;
  $character_data_on=false;
}
function characterdata($parser,$data)       //定义回调函数
{
  global $character_data_on;
  global $tag_complete;
  if((!$character_data_on)&&(!$tag_complete))
  {
    echo “&gt”;
    $tag_complete=true;
  }
  echo “<b>$data</b>”;
  $character_data_on=true;
}
$xml_parser=xml_parser_create();        //创建xml解析器
xml_parser_set_option($xml_parser,xml_option_case_folding,false); //对解析器进行设置
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”);         //输出错误信息
}
echo “<pre>”;
while($file_content=fread($fp,4096))         //循环读取内容
{
  if(!xml_parse($xml_parser,$file_content,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)));
  }
}
echo “</pre>”;
xml_parser_free($xml_parser);          //释放xml解析器
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注