天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP用SAX解析XML的實現代碼與問題分析

復制代碼 代碼如下:
<?php
$g_books = array();
$g_elem = null;
function startElement( $parser, $name, $attrs )
{
global $g_books, $g_elem;
if ( $name == 'BOOK' ) $g_books []= array();
$g_elem = $name;
}
function endElement( $parser, $name )
{
global $g_elem;
$g_elem = null;
}
function textData( $parser, $text )
{
global $g_books, $g_elem;
if ( $g_elem == 'AUTHOR' ||
$g_elem == 'PUBLISHER' ||
$g_elem == 'TITLE' )
{
$g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;
}
}
$parser = xml_parser_create();
xml_set_element_handler( $parser, "startElement", "endElement" );
xml_set_character_data_handler( $parser, "textData" );
$f = fopen( 'books.xml', 'r' );
while( $data = fread( $f, 4096 ) )
{
xml_parse( $parser, $data );
}
xml_parser_free( $parser );
foreach( $g_books as $book )
{
echo $book['TITLE']." - ".$book['AUTHOR']." - ";
echo $book['PUBLISHER']."/n";
}
?>

php中用SAX方式解析XML發現的問題
XML如下:
so.xml
復制代碼 代碼如下:
<?xml version="1.0" encoding="GBK"?>
<result>
<row>
<id>1047869</id>
<date>2008-08-28 14:54:51</date>
<title>紅花還需綠葉扶--淺談腳架云臺的選購</title>
<summary>很多專業攝影師在選購三腳架的時候,往往出手闊綽,3、4000元一個的捷信或者曼富圖三腳架常常不用經過思考就買下來了,可是,他們卻總是忽視了云臺的精挑細眩其實,數碼相機架在三腳架上面究竟穩不穩,起決定作用的是云臺,那么我們如何才能挑選到一款穩如磐石的云臺呢?云臺家族種類繁多用途迥異簡單的說,腳架云臺是用于連接相機與腳架進行角度調節的部件,主要分成三維云臺和球型云臺。三維云臺在橫向旋轉</summary>
</row>
...(省略若干行)
</result>

xml_class.php
復制代碼 代碼如下:
<?php
class xml {
var $parser;
var $i =0;
var $search_result = array();
var $row = array();
var $data = array();
var $now_tag;
var $tags = array("ID", "CLASSID", "SUBCLASSID", "CLASSNAME", "TITLE", "SHORTTITLE", "AUTHOR", "PRODUCER", "SUMMARY", "CONTENT", "DATE");
function xml()
{
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "tag_open", "tag_close");
xml_set_character_data_handler($this->parser, "cdata");
}
function parse($data)
{
xml_parse($this->parser, $data);
}
function tag_open($parser, $tag, $attributes)
{
$this->now_tag=$tag;
if($tag=='RESULT') {
$this->search_result = $attributes;
}
if($tag=='ROW') {
$this->row[$this->i] = $attributes;
}
}
function cdata($parser, $cdata)
{
if(in_array($this->now_tag, $this->tags)){
$tagname = strtolower($this->now_tag);
$this->data[$this->i][$tagname] = $cdata;
}
}
function tag_close($parser, $tag)
{
$this->now_tag="";
if($tag=='ROW') {
$this->i++;
}
}
}
?>

search.php
復制代碼 代碼如下:
<?php
require_once("./xml_class.php");
$xml = file_get_contents("./so.xml");
$xml_parser = new xml();
$xml_parser->parse($xml);
print_r($xml_parser);
?>

最后得到的結果中summary中的數據少了很多,總是得不到完整的summary內容。有時還會得到亂碼,在網上也找了半天也不知道是什么問題引起的。
  后來才發現問題是因為xml_parser解析XML是循環處理節點中的數據的,每次只取大概300個字符長度(具體是多少,我也不太清楚,只是用strlen輸出大概在300左右),于是才知道是因為每次的循環就會把前次的數據給復蓋了,這樣就會出現數據不全的問題。
  解決辦法就是把xml_class文件中的xml類中的cdata方法中$this->data[$this->i][$tagname] = $cdata;改為$this->data[$this->i][$tagname] .= $cdata;即可解決(其中有一些NOTICE錯誤,php已忽略了).

php技術PHP用SAX解析XML的實現代碼與問題分析,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产伦精品一区二区三区免费观看 | 日日噜噜噜夜夜爽爽狠狠图片 | 牛牛超碰 国产 | 性色AV一区二区三区咪爱四虎 | 女仆乖H调教跪趴 | 日本理论片和搜子同居的日子2 | 久久青青热 | 在线 中文字幕 | 亚色九九九全国免费视频 | xfplay 无码专区 亚洲 | 超碰日韩人妻高清视频 | 4399的视频BD高清在线观看免费 | 插我一区二区在线观看 | 亚洲欧美日韩一级特黄在线 | 日韩高清一区二区三区不卡 | 恋夜直播午夜秀场最新 | 18禁国产精品久久久久久麻豆 | 少妇被阴内射XXXB少妇BB | 中文成人在线 | 无码国产色欲XXXX视频 | 99视频偷窥在线精品国自产拍 | 国产乱人伦AV麻豆网 | 99热久久精品国产一区二区 | yin乱教师系列合集 yin荡体育课羞耻play双性 | 久久久久毛片免费观看 | 囯产精品一品二区三区 | 美女国产毛片A区内射 | 欧美麻豆一精品一AV一免费 | 樱花动漫成人隐藏入口 | 最近日本免费观看MV免费 | 国产特级毛片AAAAAAA高清 | 最新国产亚洲亚洲精品视频 | 办公室沙发口爆12P 办公室日本肉丝OL在线 | 大学生高潮无套内谢视频 | 欧美卡1卡2卡三卡2021精品 | 真实农村女人野外自拍照片 | 国产AV天堂亚洲AV麻豆 | 可以看的黄页的网站 | 好湿好滑好硬好爽好深视频 | 色播成人影院 | 日本福利片午夜免费观着 |