Php 简明教程

PHP - Simple XML Parser

PHP 的 SimpleXML 扩展提供了非常简单易用的工具集,用于将 XML 转换为可以使用普通属性选择器和数组迭代器进行处理的对象。它是一个基于树的解析器,适用于简单的 XML 文件,但是在处理更大且复杂的 XML 文档时可能会遇到问题。

The SimpleXML extension of PHP provides a very simple and easy to use toolset to convert XML to an object that can be processed with normal property selectors and array iterators. It is a tree_based parser, and works well with simple XML files, but may face issues when working with larger and complex XML documents.

SimpleXML 扩展中定义了以下函数:

The following functions are defined in SimpleXML extension −

simplexml_load_file

simplexml_load_file() 函数将 XML 文件解释为一个对象:

The simplexml_load_file() function interprets an XML file into an object −

simplexml_load_file(
   string $filename,
   ?string $class_name = SimpleXMLElement::class,
   int $options = 0,
   string $namespace_or_prefix = "",
   bool $is_prefix = false
): SimpleXMLElement|false

给定文件中的格式良好的 XML 文档将转换为一个对象。

A well-formed XML document in the given file is converted into an object.

filename 参数是一个表示要解析的 XML 文件的字符串。class_name 是一个可选参数。它指定函数将返回其对象的类。该函数返回一个 SimpleXMLElement 类对象,其中属性包含 XML 文档中保存的数据,或者在失败时返回 false

The filename parameter is a string representing the XML file to be parsed. class_name is the optional parameter. It specifies the class whose object will be returned by the function. The function returns an object of class SimpleXMLElement with properties containing the data held within the XML document, or false on failure.

Example

请看以下示例:

Take a look at the following example −

<?php
   $xml = simplexml_load_file("test.xml") or die("Error: Cannot create object");
   print_r($xml);
?>

它将生成以下 output

It will produce the following output

SimpleXMLElement Object
(
   [Course] => Android
   [Subject] => Android
   [Company] => TutorialsPoint
   [Price] => $10
)

simplexml_load_string

simplexml_load_string() 函数将 XML 文件解释为一个对象。

The simplexml_load_string() function interprets an XML file into an object.

simplexml_load_string(
   string $filename,
   ?string $class_name = SimpleXMLElement::class,
   int $options = 0,
   string $namespace_or_prefix = "",
   bool $is_prefix = false
): SimpleXMLElement|false

给定字符串中的格式良好的 XML 文档将转换为一个对象。

A well-formed XML document in the given string is converted into an object.

$data 参数是一个表示要解析的 XML 文档的字符串。 class_name 是一个可选参数。它指定函数将返回其对象的类。该函数返回一个 SimpleXMLElement 类对象,其中属性包含 XML 文档中保存的数据,或者在失败时返回 false

The $data parameter is a string representing the XML document to be parsed. class_name is the optional parameter. It specifies the class whose object will be returned by the function. The function returns an object of class SimpleXMLElement with properties containing the data held within the XML document, or false on failure.

Example

请看以下示例:

Take a look at the following example −

<?php
   $data = "<?xml version = '1.0' encoding = 'UTF-8'?>
   <note>
      <Course>Android</Course>
      <Subject>Android</Subject>
      <Company>TutorialsPoint</Company>
      <Price>$10</Price>
   </note>";
   $xml = simplexml_load_string($data) or die("Error: Cannot create object");
   print_r($xml);
?>

它将生成以下 output

It will produce the following output

SimpleXMLElement Object
(
   [Course] => Android
   [Subject] => Android
   [Company] => TutorialsPoint
   [Price] => $10
)

simplexml_import_dom

simplexml_import_dom() 函数从 DOM 节点构造一个 SimpleXMLElement 对象。

The simplexml_import_dom() function constructs a SimpleXMLElement object from a DOM node.

simplexml_import_dom(SimpleXMLElement|DOMNode $node, ?string
   $class_name = SimpleXMLElement::class): ?SimpleXMLElement

该函数获取 DOM 文档的一个节点,并将其转化为一个 SimpleXML 节点。然后,这个新对象可以用作原生 SimpleXML 元素。

This function takes a node of a DOM document and makes it into a SimpleXML node. This new object can then be used as a native SimpleXML element.

node 参数是一个 DOM Element 节点。可以给出可选的 class_name,以便 simplexml_import_dom() 返回 SimpleXMLElement 类的指定子类的对象。该函数返回的值是一个 SimpleXMLElement 或 (在失败时) null。

The node parameter is a DOM Element node. The optional class_name may be given so that simplexml_import_dom() will return an object of the specified sub class of the SimpleXMLElement class. The value returned by this function is a SimpleXMLElement or null on failure.

Example

请看以下示例:

Take a look at the following example −

<?php
   $dom = new DOMDocument;
   $dom->loadXML('<books><book><title>PHP Handbook</title></book></books>');
   if (!$dom) {
      echo 'Error while parsing the document';
      exit;
   }

   $s = simplexml_import_dom($dom);
   echo $s->book[0]->title;
?>

它将生成以下 output

It will produce the following output

PHP Handbook

Get the Node Values

以下代码演示了如何从 XML 文件获取节点值,XML 应如下所示:

The following code shows how to get the node values from an XML file and the XML should be as follows −

<?xml version = "1.0" encoding = "utf-8"?>
<tutorialspoint>
   <course category = "JAVA">
      <title lang = "en">Java</title>
      <tutor>Gopal</tutor>
      <duration></duration>
      <price>$30</price>
   </course>

   <course category = "HADOOP">
      <title lang = "en">Hadoop</title>.
      <tutor>Satish</tutor>
      <duration>3</duration>
      <price>$50</price>
   </course>

   <course category = "HTML">
      <title lang = "en">html</title>
      <tutor>raju</tutor>
      <duration>5</duration>
      <price>$50</price>
   </course>

   <course category = "WEB">
      <title lang = "en">Web Technologies</title>
      <tutor>Javed</tutor>
      <duration>10</duration>
      <price>$60</price>
   </course>
</tutorialspoint>

Example

PHP 代码应如下所示:

PHP code should be as follows −

<?php
   $xml = simplexml_load_file("books.xml") or die("Error: Cannot create object");

   foreach($xml->children() as $books) {
      echo $books->title . "<br> ";
      echo $books->tutor . "<br> ";
      echo $books->duration . "<br> ";
      echo $books->price . "<hr>";
   }
?>

它将生成以下 output

It will produce the following output

Java
Gopal

$30
________________________________________
Hadoop
Satish
3
$50
________________________________________
html
raju
5
$50
________________________________________
Web Technologies
Javed
10
$60
________________________________________