下面是关于"php解析xml的四种方法详细介绍"的攻略。
目录
背景
为了在 Web 应用程序中处理 XML 数据,了解如何在 PHP 中解析 XML 是一个很好的技能。 PHP 有多种解析 XML 的方法 可供选择。在此处提供 4 种不同的方法以供参考。
这里提供一个简单的 XML 文件作为自己的示例,感兴趣的可以自己定义一个XML文件。
<?xml version="1.0"?>
<students>
<student>
<name>Mike</name>
<age>23</age>
<sex>Male</sex>
</student>
<student>
<name>Sara</name>
<age>21</age>
<sex>Female</sex>
</student>
</students>
方法1:使用 SimpleXML 扩展
PHP SimpleXML 扩展提供了一种解析 XML 的简单方法。它可以将 XML 文件转换为一个数组或对象。
$xml=simplexml_load_file("students.xml") or die("Unable to load XML file!");
echo $xml->student[0]->name . "<br>";
echo $xml->student[0]->age . "<br>";
echo $xml->student[0]->sex . "<br>";
echo $xml->student[1]->name . "<br>";
echo $xml->student[1]->age . "<br>";
echo $xml->student[1]->sex . "<br>";
上述代码将输出以下内容
Mike
23
Male
Sara
21
Female
方法2:使用 DOM
DOM 代表文档对象模型。它以树形结构表示 XML 文档,使我们可以轻松地遍历 XML。
$doc = new DOMDocument();
$doc->load('students.xml');
$studentList = $doc->getElementsByTagName('student');
foreach ($studentList as $student) {
$name = $student->getElementsByTagName('name')->item(0)->nodeValue;
$age = $student->getElementsByTagName('age')->item(0)->nodeValue;
$sex = $student->getElementsByTagName('sex')->item(0)->nodeValue;
echo "$name - $age - $sex <br />";
}
上述代码将输出以下内容
Mike - 23 - Male
Sara - 21 - Female
方法3:使用 XMLReader
使用 XMLReader 解析大型 XML 文件时,内存使用率较低。 XMLReader 以流的方式读取 XML,所以它不会同时将整个 XML 文件加载到内存中,适用于大型 XML 数据。
$reader = new XMLReader();
$reader->open('students.xml');
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$name = $reader->name;
if ($name == "name") {
$reader->read();
echo "Name: ".$reader->value."<br>";
} else if ($name == "age") {
$reader->read();
echo "Age: ".$reader->value."<br>";
} else if ($name == "sex") {
$reader->read();
echo "Sex: ".$reader->value."<br>";
}
}
}
$reader->close();
上述代码将输出以下内容
Name: Mike
Age: 23
Sex: Male
Name: Sara
Age: 21
Sex: Female
方法4:使用 SAX
SAX 代表简单 API 用于 XML。它是一种基于事件的解析器,可以监听XML文件中的事件。PHP 应用程序可以实现解析器将XML解析为自己的程序格式。
class StudentHandler extends DefaultHandler {
private $name = "";
private $age = "";
private $sex = "";
public function startElement($uri, $localName, $qName, $attributes) {
switch($qName) {
case "name":
$this->name = "";
break;
case "age":
$this->age = "";
break;
case "sex":
$this->sex = "";
break;
}
}
public function characters($ch, $start, $length) {
$temp = trim($ch);
if (!empty($temp)) {
if (!empty($this->name)) {
$this->name .= $temp;
} else if (!empty($this->age)) {
$this->age .= $temp;
} else if (!empty($this->sex)) {
$this->sex .= $temp;
}
}
}
public function endElement($uri, $localName, $qName) {
switch($qName) {
case "name":
echo "Name: ".$this->name."<br>";
break;
case "age":
echo "Age: ".$this->age."<br>";
break;
case "sex":
echo "Sex: ".$this->sex."<br>";
break;
}
}
}
$xmlHandler = new StudentHandler();
$xmlParser = xml_parser_create();
xml_set_element_handler($xmlParser, array($xmlHandler, "startElement"), array($xmlHandler, "endElement"));
xml_set_character_data_handler($xmlParser, array($xmlHandler, "characters"));
$fp = fopen("students.xml", "r");
while ($data = fread($fp, 4096)) {
xml_parse($xmlParser, $data, feof($fp)) or
die (sprintf("XML Error: %s at line %d",xml_error_string(xml_get_error_code($xmlParser)),
xml_get_current_line_number($xmlParser)));
}
fclose($fp);
上述代码将输出以下内容
Name: Mike
Age: 23
Sex: Male
Name: Sara
Age: 21
Sex: Female
总结
这里介绍了 4 种不同的方法以供参考。 PHP 中解析 XML 以及 DOM 操作是 PHP 应用程序中的重要内容之一,只有掌握了这些,我们才能创建符合标准的网站或应用程序,并提供有价值的服务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php 解析xml 的四种方法详细介绍 - Python技术站