PHP XML Expat ပေါ်လွှတ်တင်သည်

内建的 Expat 解析器使在 PHP 中处理 XML 文档成为可能。

什么是 XML?

XML 用于描述数据,其焦点是数据是什么。XML 文件描述了数据的结构。

在 XML 中,没有预定义的标签。您必须定义自己的标签。

如果希望学习更多有关 XML 的内容,请访问我们的 XML အထုံး

什么是 Expat?

如需读取和更新 - 创建创建并处理 - 一个 XML 文档,您需要 XML 解析器。

有两种基本的 XML 解析器类型:

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

Expat ကယ်လဲဘွဲ့

အခင်းအတာ အကြောင်းပြု ဘွဲ့ကယ်လဲဘွဲ့ သည် အပြင်ဘက် XML ဘွဲ့အချက်များ အတွက် အရေးပါသော အချက်အလက်များ ကို သုံးစွဲပြီး သို့မဟုတ် သူတို့၏ အကျိုးဆက်ဖြတ်မှုကို သုံးစွဲဘဲ ဖြစ်သည်။ အမှုထမ်းပုံ ဘွဲ့ကယ်လဲဘွဲ့ သည် ပီပီမှု လိပ်သီးများ အတွက် အမြန်တက် အလွယ်တက် ဖြစ်ပြီး သုံးစွဲနိုင်ပါသည်။

အောက်ပါ XML ပိုင်းဖုံးကို ကြည့်ပါ -

<from>ဂျွန်</from>

အခင်းအတာ အကြောင်းပြု ဘွဲ့ကယ်လဲဘွဲ့ သည် အပြင်ဘက် XML ဘွဲ့အချက်များကို တစ်ခုပြီး တစ်ခု ခွဲခြားခြင်း အားဖြင့် သုံးစွဲပါ။

  • အစကြိမ်မှာ စတင်ပေးပါ - from
  • CDATA အစကြိမ်မှာ ကြိမ်မှာ ဂျွန်
  • အရုပ်အချက်ကို ပိတ်ပေးပါ - from

အပြင်ဘက် XML ဘွဲ့အချက်များ သည် အသုံးပြုခြင်း အကောင်းမွန်သော XML ဖြစ်သည်။ သို့သော် အခြား သုံးစွဲသည့် XML ဘွဲ့အချက် မပါဘဲ ဖြစ်သည်။

ထို့ပြင် အကြောင်းပြု သန့်ခွဲဘွဲ့ကို သုံးစွဲရာတွင် အခြေအနေ မတူပေ။ Expat ကယ်လဲဘွဲ့ သည် အကျိုးဆက်ဖြတ်မှုကို စစ်ဆေးခြင်း မပြုဘဲ ရှိသည်။

အခင်းအတာကို အကြောင်းပြုသော အကြောင်းပြု သန့်ခွဲဘွဲ့ဖြစ်သည်။ Expat ကယ်လဲဘွဲ့ သည် အမြန်တက် အလွယ်တက် ဖြစ်ပြီး ပီပီမှု လိပ်သီးများ အတွက် သာလွန် တူကြီးပြီး ဖြစ်သည်။

ထင်မြင်ချက်:XML မူးယစ်သုံး သည် အသုံးပြုခြင်း မပြတ်ဘဲ မလုံလောက်သော အသုံးပြုခြင်း ဖြစ်သည်။ Expat ကယ်လဲဘွဲ့ သည် အမှားအသုံးပြုခြင်း မပြတ်ဘဲ ရှိသည်။

တပ်ဆင်

XML Expat ကယ်လဲဘွဲ့သည် PHP အခြေခံအုပ်စုမှာ ပါဝင်သည်။ ထိုက်သင့်သော ဖိုင်များကို တပ်ဆင်ခြင်း မပြုရပေ။

XML ဖိုင်

ကျမ်းကိုယ်တိုင် သုံးစွဲသည့် XML ဖိုင်များကို အသုံးပြုပါ။

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>ဂေါ်ဂျိုး</to>
<from>ဂျွန်</from>
<heading>အမှာမပြတ်</heading>
<body>မင်းမှုးပြီးပြီ!</body>

初始化 XML 解析器

我们要在 PHP 中初始化 XML 解析器,为不同的 XML 事件定义处理器,然后解析这个 XML 文件。

အမျိုး

<?php
//Initialize the XML parser
$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);
?>

以上代码的输出:

-- Note --
To: George
From: John
Heading: Reminder
Message: Don't forget the meeting!

工作原理解释:

  • 通过 xml_parser_create() 函数初始化 XML 解析器
  • 创建配合不同事件处理程序的的函数
  • 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
  • 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数
  • 通过 xml_parse() 函数来解析文件 "test.xml"
  • 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
  • 调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存

更多 PHP Expat 解析器的信息

如需更多有关 PHP Expat 函数的信息,请访问我们的 PHP XML Parser 参考手册。