PHP-XML

2021-01-20 06:13

阅读:663

标签:start   之间   通过   document   class   when   需要   检查   number   

目录
  • 1 XML
  • 2 PHP处理XML
    • 2.1 Expat 解析器
    • 2.2 DOM 解析器
    • 2.3 SimpleXML 函数

1 XML

  • 什么是 XML?
    可扩展标记语言。
    一种被设计用来传输和存储数据的语言,其焦点是数据的内容。
    设计宗旨是传输数据,而不是显示数据,与HTML不同。
  • XML用来干嘛?
    XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。
    技术图片
    上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。
    但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
  • 总结
    一个方便传输数据的格式
  • 一个实例
    XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶"。
    在 XML 中,没有预定义的标签。必须定义自己的标签。
    技术图片
    上图表示下面的 XML 中的一本书,这样的书有三本:
Everyday Italian
       Giada De Laurentiis
       200530.00Harry Potter
       J K. Rowling
       200529.99Learning XML
       Erik T. Ray
       200339.95

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 文档的内容,而不是它们的结构。正因为如此,基于事件的解析器能够比基于树的解析器更快地访问数据。
    Jani
    基于事件的解析器把上面的 XML 报告为一连串的三个事件:
  • 开始元素:from
  • 开始 CDATA 部分,值:Jani
  • 关闭元素:from

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

  1. 实例
  2. 用在实例的XML 文件
ToveJaniReminderDon‘t forget me this weekend!
  1. 初始化解析器并解析XML文件
    要在 PHP 中初始化 XML 解析器,为不同的 XML 事件定义处理器,然后解析这个 XML 文件。
";
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 "
"; } //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内置。
Jani

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. 输出每个子节点的元素名称和数据
    技术图片
    输出:
    技术图片

PHP-XML

标签:start   之间   通过   document   class   when   需要   检查   number   

原文地址:https://www.cnblogs.com/Rain99-/p/13324378.html


评论


亲,登录后才可以留言!