行处理。
3.基于 XML数据路径的
查询 SimpleXML组件提供了一种基于 XML数据路径的查询方法。 XML数据路径即从 XML的根到某一个标签所经过的全部标签。这种路径使用斜线“ /”隔开标签名。例如,对于上面的 XML数据,要
查询所有的标签“name”中的值,从根开始要经过 departs、depart、employees和 employee标签,则其路径
为“/departs/depart/employees/employee/name”。 SimpleXML组件使用 xpath方法来解析路径,其语法格式如下所示。
xpath(string path)
其中的 path为路径。该方法返回了一个包含有所有要查询标签值的数组。以下代码
查询了上面 XML数据中的所有 name标签。
复制代码 代码如下:
<?php
$xml = simplexml_load_file(''example.xml''); //读取 XML文件
$result = $xml->xpath(''/departs/depart/employees/employee/name''); //定义节点
var_dump($result); //输出节点
?>
运行结果如下所示。
复制代码 代码如下:
array(3) {
[0]=> object(SimpleXMLElement)#2 (1) {
[0]=> string(5) “Simon”
}
=> object(SimpleXMLElement)#3 (1) {
[0]=> string(6) “Elaine”
}
=> object(SimpleXMLElement)#4 (1) {
[0]=> string(5) “Helen”
}
}
可以看出,所有的 name标签均被
查询出来。
2.3 XML数据的修改
对于 XML数据的修改与读取 XML数据中的标签方法类似。即通过直接修改 SimpleXML对象中的标签的值来实现。以下代码实现了对上面 XML数据中第一个“ depart”标签的“ name”子标签的修改。
复制代码 代码如下:
<?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'');