PHP 操作 XML 檔案 – 讀取、顯示

來源:互聯網
上載者:User
本例中的php檔案讀取、顯示xml檔案內容

以下為php檔案的內容,把該php檔案和slashdot.xml放在同一個檔案夾即可

<?php
$open_tags = array(
    'STORY' => '<STORY>',
    'TITLE' => '<TITLE>',
    'URL' => '<URL>',
'AUTHOR'=> '<AUTHOR>'
);
$close_tags = array(
    'STORY' => '</STORY>',
    'TITLE' => '</TITLE>',
    'URL' => '</URL>',
'AUTHOR'=> '</AUTHOR>'
);
?>

<?php
//下面就是定義函數來提取資料:

// 處理開始標記的屬性指
// $attrs是一個多維陣列,索引值為屬性名稱, 值就是該屬性的值
function startElement($parser, $name, $attrs=''){
    global $open_tags, $temp, $current_tag;
    $current_tag = $name;
    if ($format = $open_tags[$name]){
    switch($name){
        case 'STORY':
        echo '新的故事: ';
        break;
        default:
        break;
    }
    }
}

// $current_tag告訴我們正在處理的標記,我們隨後會在characterData函數中使用
//
// 當遇到</STORY>標記時我們知道要flush所有的臨時變數準備操作下一個標記
<lt;/STORY>',
    'TITLE' => '</TITLE>',
    'URL' => '</URL>',
'AUTHOR'=> '</AUTHOR>'
);
?>

<?php
//下面就是定義函數來提取資料:

// 處理開始標記的屬性指
// $attrs是一個多維陣列,索引值為屬性名稱, 值就是該屬性的值
function startElement($parser, $name, $attrs=''){
    global $open_tags, $temp, $current_tag;
    $current_tag = $name;
    if ($format = $open_tags[$name]){
    switch($name){
        case 'STORY':
        echo '新的故事: ';
        break;
        default:
        break;
    }
    }
}

// $current_tag告訴我們正在處理的標記,我們隨後會在characterData函數中使用
//
// 當遇到</STORY>標記時我們知道要flush所有的臨時變數準備操作下一個標記
function endElement($parser, $name, $attrs=''){
    global $close_tags, $temp, $current_tag;
    if ($format = $close_tags[$name]){
    switch($name){
        case 'STORY':
        return_page($temp);
        $temp = '';
        break;
        default:
        break;
    }
    }
}

// 傳送給此函數的是元素間的資料
// 例如,對<TITLE>Title Here</TITLE>,$data就等於'Title Here'
function characterData($parser, $data){
    global $current_tag, $temp, $catID;
    switch($current_tag){
    case 'TITLE':
        $temp['title'] = $data;
        $current_tag = '';
        break;
    case 'URL':
        $temp['url'] = $data;
        $current_tag = '';
        break;
case 'AUTHOR':
     $temp['author'] = $data;
        $current_tag = '';   
    default:
        break;
    }
}
?>  

<?php

function return_page(){
    global $temp;
    echo 'o <A HREF="'.$temp['url'].'">'.$temp['title'].'</A><BR>';
echo 'Author:'.$temp['author'].'<BR>';
echo '-----------------------------';
echo '<br>';
}

// 分析的內容
$xml_file = 'slashdot.xml';

// 定義字元集,預設是UTF-8
$type = 'UTF-8';

// 建立解析器
$xml_parser = xml_parser_create($type);

// 設定解析選項
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');

// 告訴PHP發現元素時要調用什麼函數
// 這些函數同時也處理元素的屬性
xml_set_element_handler($xml_parser, 'startElement','endElement');

//告訴PHP對字元資料調用什麼函數
xml_set_character_data_handler($xml_parser, 'characterData');

if (!($fp = fopen($xml_file, 'r'))) {
    die("無法開啟 $xml_file 檔案進行解析!n");
}

// 通過迴圈來解析整個檔案
while ($data = fread($fp, 4096)) {
    if (!($data = utf8_encode($data))) {
        echo 'ERROR'."n";
    }
    if (!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf( "XML error: %s at line %dnn",
        xml_error_string(xml_get_error_code($xml_parser)),
        xml_get_current_line_number($xml_parser)));
    }
}

xml_parser_free($xml_parser);

?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.