XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument。本节主要介绍simpleXML
1.1创建SimpleXML对象
1.1. 创建SimpleXML对象
$data = <<<”XML”
<?xml version=’1.0′ encoding=’utf-8’?>//这一行可以不要,会自动创建
<departs>
<depart>
<name>name1</name>
<employees>
<employee>
<serial_no attr=’xxxx’ sex=’nan’>100001</serial_no>
<name>Simon</name>
</employee>
<employee>
<serial_no>100002</serial_no>
<name>Elaine</name>
</employee>
</employees>
</depart>
<depart>
<name>name2</name>
<employees>
<employee>
<serial_no>110001</serial_no>
<name>yuxiaotao</name>
</employee>
</employees>
</depart>
</departs>
XML;
$xml = simplexml_load_string($data); //创建 SimpleXML对象
echo “<pre>”;
print_r($xml); //输出 XML
$xml->depart[0]->employees->employee[0]->name;
1.1.2. simplexml_load_file
$xml = simplexml_load_file(‘test.xml’);
只是把xml文件放在文件里面;比如有的时候我们会把xml文件缓存在memcache里面
$dom = new DOMDocument;
$dom->loadXML(‘<books><book><title>blah</title></book></books>’);
if (!$dom) {
echo ’Error while parsing the document’;
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title;
Eg:输出:100001
Echo $xml->depart[0]->employees->employee[0]->serial_no;
$xml->depart[0]->employees->employee[0]->serial_no=123
Eg:输出xxxx
Echo $xml->depart[0]->employees->employee[0]->serial_no['attr'];
$xml->depart[0]->employees->employee[0]->serial_no['attr']=11111;
$xml->depart[0]->employees->employee[0]->serial_no->addAttribute(‘name’,'yuyi’);
unset($xml->depart[0]->employees->employee->serial_no['attr']);
$a=$xml->depart[0]->employees->employee[0]->serial_no->attributes();
echo ”<pre>”;print_r($a);
输出结果:
注意:
$a=$xml->depart[0]->employees->employee[0]->name->attributes();
echo ”<pre>”;print_r($a);
输出结果:
注意:只能够给没有值的节点添加子节点
$xml->depart[0]->employees->employee[0]->addChild(‘names’,'yuyi’);
输出结构:
unset($xml->depart[0]->employees->employee[0]->names);
$xml->count();
注意:这里只是子节点,不包括孙子节点
$xml = simplexml_load_string($data); //创建 SimpleXML对象
foreach($xml->depart as $node){
echo $node->name.’<br>’;
}
输出结果:
SimpleXML组件提供了一种基于 XML数据路径的查询方法。 XML数据路径即从 XML的根到某一个标签所经过的全部标签。这种路径使用斜线“ /”隔开标签名。例如,对于上面的 XML数据,要查询所有的标签“name”中的值,从根开始要经过 departs、depart、employees和 employee标签,则其路径为“/departs/depart/employees/employee/name”。 SimpleXML组件使用 xpath方法来解析路径,其语法格式如下所示。xpath(string path)其中的 path为路径。该方法返回了一个包含有所有要查询标签值的数组。以下代码查询了上面 XML数据中的所有 name标签。
Eg:
$result = $xml->xpath(‘/departs/depart/employees/employee/name’);
echo ”<pre>”;print_r($result); //输出节点
输出结果: