下面我先是介绍一个朋友自己写的一个操作xml文档程序,然后再介绍了php中一个自带的解析xml文档的函数功能,有需要的朋友可参考,代码如下:
/*
encoding = $encoding; $this->xml = new domdocument($version, $encoding); if($xmlfile)$this->xml->load($xmlfile); } function getrootele($roottag){ $this->xmlroot = $this->xml->getelementsbytagname($roottag)->item(0); } function getseachitem($itemstag, $seachnode, $seachvalue){ $this->items = $this->xml->getelementsbytagname($itemstag); $this->items->length; for($i=0; $iitems->length; $i++){ $item = $this->items->item($i);//元素 $node = $item->getelementsbytagname($seachnode);//节点 for($j = 0; $jlength; $j++){ $subnode = $node->item($j); if($seachvalue == $subnode->nodevalue){ $this->seachnode = $subnode; $this->seachitem = $item; $this->seachvalue = $subnode->nodevalue; break(2); } } } return ($this->seachnode) ? true : false; } function update($nodevalue, $nodetag = '',$append = false, $index = 0){ if($append){ if($nodetag) $this->seachitem->getelementsbytagname($nodetag)->item($index)->nodevalue += $nodevalue; else $this->seachnode->nodevalue += $nodevalue; }else{ if($nodetag) $this->seachitem->getelementsbytagname($nodetag)->item($index)->nodevalue = $nodevalue; else $this->seachnode->nodevalue = $nodevalue; } } function save($filename){ $this->writebytes = $this->xml->save($filename); return ($this->writebytes) ? true : false; } } $test = new xmldom('student.xml'); $test->getseachitem('学生','年龄','103');//找到 年龄=103 的猪八戒 $test->update('小猪猪', '名字', false, 1); //把猪八戒的第二个名字改成:小猪猪 $test->save('new.xml'); //保存成新文件?>
上面是使用了dom来操作,下面我们利用php中的simplexml来操作xml,也算是很标准的一个操作xml文档的类了.
simplexml_load_file(string filename)
这里的 filename变量是用于存储 xml数据文件的文件名及其所在路径,以下代码使用 simplexml_load_file函数来创建了一个 simplexml对象,代码如下:
其中,example.xml存储的数据与上面的$data完全相同,运行结果也与上面完全相同.
上面两种方法实现了同样的功能,其区别就在于 xml的数据源不同,如果 xml的数据源在 php脚本文件中,则需要使用 simplexml_load_string来进行创建,如果 xml的数据源在一个单独的 xml文件中,则需要使用 simplexml_load_file来进行创建.
读取 xml数据中的标签
与操作数组类型的变量类似,读取 xml也可以通过类似的方法来完成,例如,如果需要读取上面 xml数据中每一个depart标签下的name属性,可以通过使用 foreach函数来完成,如以下代码所示.
depart as $a) { echo $a->name
; } //运行结果如下所示。 //production support //testing center ?>
读取 xml文件,循环读取 xml数据中的每一个 depart标签,输出其中的 name属性,也可以使用方括号[]来直接读取 xml数据中指定的标签,以下代码输出了上面 xml数据中的第一个depart标签的name属性,代码如下:
depart->name[0]; //输出节点 //运行结果如下所示。 //production support?>
对于一个标签下的所有子标签,simplexml组件提供了 children方法进行读取,例如,对于上面的 xml数据中的depart标签,其下包括两个子标签:name和employees,以下代码实现了对第一个depart标签下的子标签的读取.
文章链接:
随便收藏,请保留本文地址!
