zoukankan      html  css  js  c++  java
  • PHP-XML

    1 XML

    • 什么是 XML?
      可扩展标记语言。
      一种被设计用来传输和存储数据的语言,其焦点是数据的内容。
      设计宗旨是传输数据,而不是显示数据,与HTML不同。
    • XML用来干嘛?
      XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。

      上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。
      但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
    • 总结
      一个方便传输数据的格式
    • 一个实例
      XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶"。
      在 XML 中,没有预定义的标签。必须定义自己的标签。

      上图表示下面的 XML 中的一本书,这样的书有三本:
    <bookstore>
       <book category="COOKING">
           <title lang="en">Everyday Italian</title>
           <author>Giada De Laurentiis</author>
           <year>2005</year>
           <price>30.00</price>
       </book>
       <book category="CHILDREN">
           <title lang="en">Harry Potter</title>
           <author>J K. Rowling</author>
           <year>2005</year>
           <price>29.99</price>
       </book>
       <book category="WEB">
           <title lang="en">Learning XML</title>
           <author>Erik T. Ray</author>
           <year>2003</year>
           <price>39.95</price>
       </book>
    </bookstore>
    

    2 PHP处理XML

    如需读取和更新 - 创建和处理 - 一个 XML 文档,则需要 XML 解析器。
    PHP内置了两个XML解析器:Expat和DOM,和一个处理XML函数:SimpleXML
    有两种基本的 XML 解析器类型:

    • 基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了对树中元素的访问,例如文档对象模型 (DOM)。DOM 解析器是基于树的解析器。
    • 基于事件的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。Expat 解析器是基于事件的解析器。

    与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。
    当执行类似下列的基础任务时,SimpleXML 使用起来非常快捷:

    • 读取/提取 XML 文件/字符串的数据
    • 编辑文本节点或属性

    然而,在处理高级 XML 时,比如命名空间,最好使用 Expat 解析器或 XML DOM。

    2.1 Expat 解析器

    1. Expat 是什么?
      Expat 解析器是基于事件的解析器。PHP内置。
      基于事件的解析器集中在 XML 文档的内容,而不是它们的结构。正因为如此,基于事件的解析器能够比基于树的解析器更快地访问数据。
      <from>Jani</from>
      基于事件的解析器把上面的 XML 报告为一连串的三个事件:
    • 开始元素:from
    • 开始 CDATA 部分,值:Jani
    • 关闭元素:from

    上面的 XML 实例包含了格式良好的 XML。不过这个实例是无效的 XML,因为没有与它关联的文档类型声明 (DTD)。比如<?xml version="1.0" encoding="utf-8"?>
    然而,在使用 Expat 解析器时,这没有区别。Expat 是不检查有效性的解析器,忽略任何 DTD。

    1. 实例
    2. 用在实例的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文件
      要在 PHP 中初始化 XML 解析器,为不同的 XML 事件定义处理器,然后解析这个 XML 文件。
    <?php
    //初始化 XML 解析器
    $parser=xml_parser_create();
    //Function to use at the start of an element
    function start($parser,$element_name,$element_attrs)
    {
    switch($element_name)
    {
    case "NOTE":
    echo "-- Note --<br>";
    break;
    case "TO":
    echo "To: ";
    break;
    case "FROM":
    echo "From: ";
    break;
    case "HEADING":
    echo "Heading: ";
    break;
    case "BODY":
    echo "Message: ";
    }
    }
    //Function to use at the end of an element
    function stop($parser,$element_name)
    {
    echo "<br>";
    }
    //Function to use when finding character data
    function char($parser,$data)
    {
    echo $data;
    }
    //Specify element handler
    xml_set_element_handler($parser,"start","stop");
    //Specify data handler
    xml_set_character_data_handler($parser,"char");
    //Open XML file
    $fp=fopen("test.xml","r");
    //Read data
    while ($data=fread($fp,4096))
    {
    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)));
    }
    //Free the XML parser
    xml_parser_free($parser);
    ?>
    

    以上代码将输出:

    工作原理:

    2.2 DOM 解析器

    1. DOM 是什么?
    2. DOM 解析器
      DOM 解析器是基于树的解析器。PHP内置。
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <from>Jani</from>
    

    XML DOM 把上面的 XML 视为一个树形结构:

    • Level 1: XML 文档
    • Level 2: 根元素:
    • Level 3: 文本元素: "Jani"
    1. 实例
    2. 使用的XML
    3. 加载和输出 XML
      需要初始化 XML 解析器,加载 XML,并把它输出:

      以上代码将输出:

      如果在浏览器窗口中查看源代码,会看到下面的 HTML:

      上面的实例创建了一个 DOMDocument-Object,并把 "note.xml" 中的 XML 载入这个文档对象中。
      saveXML() 函数把内部 XML 文档放入一个字符串,这样我们就可以输出它。
    4. 遍历 XML
      初始化 XML 解析器,加载 XML,并遍历 元素的所有元素:

    在上面的实例中,可以看到了每个元素之间存在空的文本节点。
    当 XML 生成时,它通常会在节点之间包含空白。XML DOM 解析器把它们当作普通的元素,如果不注意它们,有时会产生问题。

    2.3 SimpleXML 函数

    1. 什么是 PHP SimpleXML?
      SimpleXML 是 PHP 5 中的新特性。内置。
      SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。
      SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:
    • 元素被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。
    • 属性通过使用关联数组进行访问,其中的索引对应属性名称。
    • 元素内部的文本被转换为字符串。如果一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。
    1. 实例
    2. XML文件 note.xml
    3. 输出 $xml 变量(是 SimpleXMLElement 对象)的键和元素

      输出:
    4. 输出 XML 文件中每个元素的数据

      输出:
    5. 输出每个子节点的元素名称和数据

      输出:
  • 相关阅读:
    iView
    JS
    JS
    JS
    Java
    Java
    Java
    Java
    Java
    Java
  • 原文地址:https://www.cnblogs.com/Rain99-/p/13324378.html
Copyright © 2011-2022 走看看