Php 简明教程
PHP - Simple XML Parser
PHP 的 SimpleXML 扩展提供了非常简单易用的工具集,用于将 XML 转换为可以使用普通属性选择器和数组迭代器进行处理的对象。它是一个基于树的解析器,适用于简单的 XML 文件,但是在处理更大且复杂的 XML 文档时可能会遇到问题。
SimpleXML 扩展中定义了以下函数:
simplexml_load_file
simplexml_load_file() 函数将 XML 文件解释为一个对象:
simplexml_load_file(
string $filename,
?string $class_name = SimpleXMLElement::class,
int $options = 0,
string $namespace_or_prefix = "",
bool $is_prefix = false
): SimpleXMLElement|false
给定文件中的格式良好的 XML 文档将转换为一个对象。
filename 参数是一个表示要解析的 XML 文件的字符串。class_name 是一个可选参数。它指定函数将返回其对象的类。该函数返回一个 SimpleXMLElement 类对象,其中属性包含 XML 文档中保存的数据,或者在失败时返回 false 。
simplexml_load_string
simplexml_load_string() 函数将 XML 文件解释为一个对象。
simplexml_load_string(
string $filename,
?string $class_name = SimpleXMLElement::class,
int $options = 0,
string $namespace_or_prefix = "",
bool $is_prefix = false
): SimpleXMLElement|false
给定字符串中的格式良好的 XML 文档将转换为一个对象。
$data 参数是一个表示要解析的 XML 文档的字符串。 class_name 是一个可选参数。它指定函数将返回其对象的类。该函数返回一个 SimpleXMLElement 类对象,其中属性包含 XML 文档中保存的数据,或者在失败时返回 false 。
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 −
SimpleXMLElement Object
(
[Course] => Android
[Subject] => Android
[Company] => TutorialsPoint
[Price] => $10
)
simplexml_import_dom
simplexml_import_dom() 函数从 DOM 节点构造一个 SimpleXMLElement 对象。
simplexml_import_dom(SimpleXMLElement|DOMNode $node, ?string
$class_name = SimpleXMLElement::class): ?SimpleXMLElement
该函数获取 DOM 文档的一个节点,并将其转化为一个 SimpleXML 节点。然后,这个新对象可以用作原生 SimpleXML 元素。
node 参数是一个 DOM Element 节点。可以给出可选的 class_name,以便 simplexml_import_dom() 返回 SimpleXMLElement 类的指定子类的对象。该函数返回的值是一个 SimpleXMLElement 或 (在失败时) null。
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 −
PHP Handbook
Get the Node Values
以下代码演示了如何从 XML 文件获取节点值,XML 应如下所示:
<?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
$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 −
Java
Gopal
$30
________________________________________
Hadoop
Satish
3
$50
________________________________________
html
raju
5
$50
________________________________________
Web Technologies
Javed
10
$60
________________________________________