PHP XML

作者: BelleChen | 来源:发表于2017-04-25 21:39 被阅读0次

    1. XML Expat 解析器(基于事件)

    工作原理

    使用的xml文件test.xml

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <note>
    <to>Tove</to>
        <from>Jani</from>
        <heading>Reminder</heading>
        <body>Don't forget me this weekend!</body>
    </note>
    
    1. 通过 xml_parser_create() 函数初始化 XML 解析器
    $parser = xml_parser_create();
    
    1. 创建配合不同事件处理程序的的函数
      元素开始时使用的函数
    function start ($patser, $element_name, $element_attrs) {
           switch ($element_name) {
               case "NONE":
                   echo "-- Note --<br />";
                   break;
               case "TO":
                   echo "To: ";
                   break;
               case "FROM":
                   echo "From: ";
                   break;
               case "HEADING":
                   echo "Heading: ";
                   break;
               case "BODY":
                   echo "message: ";
           }
       }
    

    元素末端使用的函数

    function stop ($parser, $element_name) {
            echo "<br />";
        }
    

    查找字符数据时使用的功能

    function char ($parser, $data) {
            echo $data;
        }
    

    指定元素的处理

    xml_set_element_handler($parser, 'start', 'stop');
    
    1. 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
      指定数据处理程序
    xml_set_element_handler($parser, 'start', 'stop');
    
    1. 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字
      指定数据处理程序
    xml_set_character_data_handler($parser, "char");
    
    1. 符数据时执行哪个函数5 通过 xml_parse() 函数来解析文件 "test.xml"
      打开xml文件
    $fp = fopen("test.xml", "r");
    
    1. 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
      读取数据
    while ($data = fread($fp,4096)) {
            xml_parse($parser, $data, feof($fp))
            or die(sprintf("XML Error: %s at lone %d",
                xml_error_string(xml_get_error_code($parser)),
                xml_get_current_line_number($parser)));
        }
    
    1. 调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存
    xml_parser_free($parser);
    

    输出效果

    To: Tove
    From: Belle
    Heading: Reminder
    message: Don't forget me this weekend!

    2. XML DOM(基于树)

    初始化xml解析器

    $xmlDoc = new DOMDocument();
    

    加载xml

    $xmlDoc->load("test.xml");
    

    遍历xml中所有元素

    $x = $xmlDoc->documentElement;
    foreach ($x->childNodes AS $item) {
          print $item->nodeName . " = " . $item->nodeValue . "<br>";
    }
    

    输出效果

    /#text =
    /to = Tove
    /#text =
    from = Belle
    /#text =
    heading = Reminder
    /#text =
    body = Don't forget me this weekend!
    /#text =
    /为转义

    3. SimpleXML

    输出test.xml

    $xml = simpexml_load_file("test.xml");
    print_r($xml);
    

    输出结果

    SimpleXMLElement Object ( [to] => Tove [from] => Belle [heading] => Reminder [body] => Don't forget me this weekend! )

    输出每个元素的数据

    $xml = simplexml_load_file("test.xml");
        echo $xml->to . "<br />";
        echo $xml->from . "<br />";
        echo $xml->heading . "<br />";
        echo $xml->body . "<br />";
    

    输出结果

    Tove
    Belle
    Reminder
    Don't forget me this weekend!

    相关文章

      网友评论

        本文标题:PHP XML

        本文链接:https://www.haomeiwen.com/subject/tcuvzttx.html