<?php
$xml = simplexml_load_file('example.xml'); //读取 XML
$xml->depart->name[0] = “Human Resource”; //修改节点
?>
修改后,并不会对 XML文件有任何影响。但是,在程序中,对于 SimpleXML对象的读取将使用修改过的值。
2.4 标准化 XML数据
SimpleXML还提供了一种标准化 XML数据的方法 asXML。asXML方法可以有效的将 SimpleXML对象中的内容按照 XML 1.0标准进行重新编排并以字符串的数据类型返回。以下代码实现了对上面 XML数据的标准化。
复制代码 代码如下:
<?php
$xml = simplexml_load_file('example.xml'); //读取 XML数据
echo $xml->asXML(); //标准化 XML数据
?>
2.5 XML数据的存储
将 SimpleXML对象中的 XML数据存储到一个 XML文件的方法非常简单,即将 asXML方法的返回结果输出到一个文件中即可。以下代码首先将 XML文件中的 depart name进行了修改,然后将修改过的 XML数据输出到另一个 XML文件。
复制代码 代码如下:
<?php
$xml = simplexml_load_file('example.xml'); //读取 XML数据
$newxml = $xml->asXML(); //标准化 XML数据
$fp = fopen(”newxml.xml”, “w”); //打开要写入 XML数据的文件
fwrite($fp, $newxml); //写入 XML数据
fclose($fp); //关闭文件
?>
代码运行后,可以看到在 newxml.xml文件中的 XML数据如下所示。
可以看出,对于 XML文件的修改已经保存到输出文件中了。
3 XML文档的动态创建
在实际应用中,时而会需要动态生成 XML文档的操作。前面介绍的 SimpleXML组件并不提供创建 XML文档的方法。因此,如果需要动态创建 XML文档,往往使用 DOM组件进行创建。 DOM是文档对象模型 Document Object Model的缩写, DOM组件提供了对 XML文档的树型解析模式。以下代码使用 DOM组件创建了一个 XML文档。
复制代码 代码如下:
<?php
//创建一个新的 DOM文档
$dom = new DomDocument();
//在根节点创建 departs标签
$departs = $dom->createElement('departs');
$dom->appendChild($departs);
//在 departs标签下创建 depart子标签
$depart = $dom->createElement('depart');
$departs->appendChild($depart);
//在 depart标签下创建 employees子标签
$employees = $dom->createElement('employees');
$depart->appendChild($employees);
//在 employees标签下创建 employee子标签
$employee = $dom->createElement('employee');
$employees->appendChild($employee);
//在 employee标签下创建 serial_no子标签
$serial_no = $dom->createElement('serial_no');
$employee->appendChild($serial_no);
//为 serial_no标签添加值节点 100001
$serial_no_value = $dom->createTextNode('100001′);
$serial_no->appendChild($serial_no_value);
//输出 XML数据
echo $dom->saveXML();
?>
输出结果如下所示。
<?xml version=”1.0″?>
<departs>
<depart>
<employees>
<employee>
<serial_no>100001</serial_no>
</employee>
</employees>
</depart>
</departs>
DOM组件除了可以用来动态创建 XML文档外,还可以用来读取 XML文件。以下代码实现了对前
面 XML文件的读取。
复制代码 代码如下:
<?php
$dom = new DomDocument(); //创建 DOM对象
$dom->load('example.xml'); //读取 XML文件
$root = $dom->documentElement; //获取 XML数据的根
read_child($root); //调用 read_child函数读取根对象
function read_child($node)
{
$children = $node->childNodes; //获得$node的所有子节点
foreach($children as $e) //循环读取每一个子节点
{
if($e->nodeType == XML_TEXT_NODE) //如果子节点为文本型则输出
{
echo $e->nodeValue.”<BR>”;
}
else if($e->nodeType == XML_ELEMENT_NODE) //如果子节点为节点对象,则调用函数处理
{
read_child($e);
}
}
}
?>
运行结果如下所示。
复制代码 代码如下:
引用
production support
100001
Simon
24
1982-11-06
5000.00
1000.00
100002
Elaine
24
1982-01-01
6000.00
2000.00
testing center
110001
Helen
23
1983-07-21
5000.00
1000.00
上面的例子使用了递归的方式对 XML数据进行了处理,实现了输出 XML数据中的所有文本型标签的功能。
4 XML应用实例——留言本
前面介绍了 XML的基本操作,本节将以设计一个 XML留言本为例来详细说明在实际应用中如何实现 PHP与 XML数据的交互操作。
4.1 XML文件结构设计
XML文件用于存储 XML数据,也就是留言本中的留言。这里,对于每条留言,在 XML数据中主要包括三项内容:留言标题、留言者姓名、留言内容。因此,将 XML文件的格式设计如下。
复制代码 代码如下: