php 中解析xml

本文介绍了使用PHP解析XML文档的三种主要方法:Expat、DOM和SimpleXML。Expat是一种基于事件的解析器,DOM则将XML文档视为树形结构进行操作,而SimpleXML将文档转换为对象,便于PHP代码的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    php解析xml有三种方式:Expat、dom、simpleXML。

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
    <to>XiaoMing</to>
    <from>xiaoZhao</from>
    <heading>Booking</heading>
    <body>Let's reading book.</body>
</note>

一、Expat方式,是一种基于事件的解析器

<?php
    # 基于时间的解析器
    echo "<p>PHP xml</p>";
    // 初始化xml解析器
    $parser = xml_parser_create();
    
    // 使用开启标签的函数
    function start($parser, $element_name, $element_attr){
        switch($element_name){
            case "NOTE":
            echo "---Node---<br>";
            break;
            case "TO":
            echo "To:";
            break;
            case "FROM":
            echo "From";
            break;
            case "HEADING":
            echo "Heading:";
            break;
            case "BODY":
            echo "Message:";
            break;
        }
    }
        
    echo "<p>****************</p>";
    // 使用结束标签做的事情
    function stop($parser, $element_name){
        echo "<br>";
    }
        
    // 对字符做的处理
    function char($parser, $data){
        echo $data;
    }
    echo "<p>read begin...</p>";
    //  定义处理器,当遇到开始和结束标签所要做的动作
    xml_set_element_handler($parser, "start", "stop");
    // 定义处理器,当遇到字符要做的动作
    xml_set_character_data_handler($parser, "char");
    // 打开xml文件
    $fp = fopen("php_text.xml","r");
    // 读取数据
    while($data=fread($fp,4096)){
        echo $data;
        xml_parse($parser, $data, feof($fp)) or 
        die (sprintf("Xml Error: %s at line %d", 
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
        
    }
    // 释放xml解析器
    xml_parser_free($parser);
    
?>

二、Dom方式,是基于树的解析器

<?php
    # dom 把xml当做树状进行处理
    $xmlDoc = new DOMDocument();
    $xmlDoc ->load("php_text.xml");

    print $xmlDoc->saveXML();

    // 循环note中的所有元素
    $x = $xmlDoc->documentElement;
    foreach($x ->childNodes as $item){
        print $item->nodeName." = ".$item->nodeValue. "<br>";
    }
?>

三、simpleXml,将文档转化为对象

<?php
    $xml = simplexml_load_file("php_text.xml");
    echo $xml->getName()."<br>";

    foreach($xml->children() as $child){
        echo $child->getName()." : ". $child ."<br>";
    }
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值