php xml Parser函数应用实例

作者:袖梨 2022-06-24

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

函数 描述 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_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 "<$name";
  if (sizeof($attrs))
  {
    while(list($k,$v)=each($attrs))
    {
      echo "$k="$v"";
    }
  }
  $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 " />";
    }
    else echo "></$name>";
    $tag_complete = true;
  }
  else echo "</$name>";
  $character_data_on=false;
}
function characterdata($parser,$data)       //定义回调函数
{
  global $character_data_on;
  global $tag_complete;
  if((!$character_data_on)&&(!$tag_complete))
  {
    echo ">";
    $tag_complete=true;
  }
  echo "$data";
  $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 "

";
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 "
";
xml_parser_free($xml_parser);          //释放xml解析器
?>

实例二

class xmlparser            //定义一个类
{
  var $xmlparser;            //类的属性
  function xmlparser()           //类的方法
  {
    $this->xmlparser=xml_parser_create();
    xml_set_object($this->xmlparser,$this);
    xml_set_character_data_handler($this->xmlparser,"char");
    xml_set_element_handler($this->xmlparser,"start_tag","end_tag");
  }
  function parse($data)           //类的方法
  {
    xml_parse($this->xmlparser,$data);
  }
  function parse_file($xmlfile)          //类的方法
  {
    $fp=fopen($xmlfile,'r');
    while($xmldata=fread($fp, 4096))
    {
      if(!xml_parse($this->xmlparser,$xmldata))
      {
        die( print "error:".
        xml_error_string(xml_get_error_code($this->xmlparser))."
line:".
        xml_get_current_line_number($this->xmlparser)."
column:".
        xml_get_current_column_number($this->xmlparser)."
");
      }
    }
  }
  function start_tag($xmlparser,$tag,$attributes)      //类的方法
  {
    print $tag."
";
  }
  function end_tag()            //类的方法
  {
  }
  function char($xmlparser,$data)         //类的方法
  {
    echo $data."
";
  }
  function close_parser()           //类的方法
  {
    xml_parser_free($this->xmlparser);
  }
}
$myxmlparser=new xmlparser();         //为类初始化一个对象
$myxmlparser->parse_file("test.xml");        //调用类的读取文件方法
$myxmlparser->close_parser();          //调用类的关闭方法
/*
php xml parser 常量
constant
xml_error_none (integer)
xml_error_no_memory (integer)
xml_error_syntax (integer)
xml_error_no_elements (integer)
xml_error_invalid_token (integer)
xml_error_unclosed_token (integer)
xml_error_partial_char (integer)
xml_error_tag_mismatch (integer)
xml_error_duplicate_attribute (integer)
xml_error_junk_after_doc_element (integer)
xml_error_param_entity_ref (integer)
xml_error_undefined_entity (integer)
xml_error_recursive_entity_ref (integer)
xml_error_async_entity (integer)
xml_error_bad_char_ref (integer)
xml_error_binary_entity_ref (integer)
xml_error_attribute_external_entity_ref (integer)
xml_error_misplaced_xml_pi (integer)
xml_error_unknown_encoding (integer)
xml_error_incorrect_encoding (integer)
xml_error_unclosed_cdata_section (integer)
xml_error_external_entity_handling (integer)
xml_option_case_folding (integer)
xml_option_target_encoding (integer)
xml_option_skip_tagstart (integer)
xml_option_skip_white (integer)

相关文章

精彩推荐