Home > Article > Backend Development > Simple processing of XML with PHP
1. Manually output xml
/* * 手动输出xml * @author flyer0126 * @since 2012/4/27 */ header("Content-Type:text/xml"); print '<?xml version="1.0"?>'."\n"; print "<shows>\n"; $shows = array( array( 'name' => 'aa', 'channel' => 'a1', 'start' => 'a2' ), array( 'name' => 'bb', 'channel' => 'b1', 'start' => 'b2' ), array( 'name' => 'cc', 'channel' => 'c1', 'start' => 'c2' ) ); foreach($shows as $show) { print "<show>\n"; foreach($show as $tag => $val) { print "<$tag>".htmlspecialchars($val)."</$tag>\n"; } print "</show>\n"; } print "</shows>\n"; /** <?xml version="1.0"?> <shows> <show> <name>aa</name> <channel>a1</channel> <start>a2</start> </show> <show> <name>bb</name> <channel>b1</channel> <start>b2</start> </show> <show> <name>cc</name> <channel>c1</channel> <start>c2</start> </show> </shows> **/
2. Generate xml through DOMDocument
/* * 通过DOMDocument生成xml * @author flyer0126 * @since 2012/4/27 */ // 创建新文档 $dom = new DOMDocument("1.0", "UTF-8"); // 创建根元素humans,并将其添加至文档 $humans = $dom->appendChild($dom->createElement("humans")); // 创建根元素zhangying,并将其添加至humans $zhangying = $humans->appendChild($dom->createElement("zhangying")); // 创建name元素,并将其添加至zhangying $name = $zhangying->appendChild($dom->createElement("name")); $name->appendChild($dom->createTextNode("张映")); $sex = $zhangying->appendChild($dom->createElement("sex")); $sex->appendChild($dom->createTextNode("男")); $old = $zhangying->appendChild($dom->createElement("old")); $old->appendChild($dom->createTextNode("28")); // 创建根元素tank,并将其添加至humans $tank = $humans->appendChild($dom->createElement("tank")); // 创建name元素,并将其添加至tank $name = $tank->appendChild($dom->createElement("name")); $name->appendChild($dom->createTextNode("tank")); $sex = $tank->appendChild($dom->createElement("sex")); $sex->appendChild($dom->createTextNode("男")); $old = $tank->appendChild($dom->createElement("old")); $old->appendChild($dom->createTextNode("28")); /*// 设置author元素 $author = $book->appendChild($dom->createElement("author")); $author->appendChild($dom->createTextNode("zhangh")); $author->setAttribute("class", "win_close");*/ // 输出 $dom->formatOutput = true; header('Content-Type:text/xml'); echo $dom->saveXML(); // 将文档表现形式放于book变量中 //$book = $dom->saveXML(); // 将文档输出为book.xml文件 //$dom->save("humans.xml"); /** <?xml version="1.0 encoding="UTF-8"?> <humans> <zhangying> <name>张映</name> <sex>男</sex> <old>28</old> </zhangying> <tank> <name>tank</name> <sex>男</sex> <old>28</old> </tank> </humans> **/
3. Read xml
/* * xml的读取 * @author flyer0126 * @since 2012/4/27 */ // 1. 利用simplexml_load_file读取简单的xml文件 $humans = simplexml_load_file("humans.xml"); foreach($humans as $key => $human) { echo $human->name."->".$human->sex."->".$human->old."\n"; } /** 张映->男->28 tank->男->28 **/ // 2. 利用DOMDocument读取xml $dom = new DOMDocument(); $dom->load("humans.xml"); $humans = $dom->getElementsByTagName("humans"); foreach($humans as $key=>$human) { $names = $human->getElementsByTagName("name"); $olds = $human->getElementsByTagName("old"); $sexes = $human->getElementsByTagName("sex"); foreach($names as $k=>$name) { $name = $names->item($k)->nodeValue; $sex = $sexes->item($k)->nodeValue; $old = $olds->item($k)->nodeValue; echo "$name->$sex->$old\n"; } } /** 张映->男->28 tank->男->28 **/ // 3. 利用正则来获取数据 $xml = ''; $f = fopen("humans.xml", "r"); while($data = fread($f, 2096)) { $xml .= $data; } fclose($f); preg_match_all('/\<humans\>(.*?)\<\/humans\>/s', $xml, $humans); foreach($humans[1] as $human) { preg_match_all('/\<name\>(.*?)\<\/name\>/s', $human, $names); preg_match_all('/\<sex\>(.*?)\<\/sex\>/s', $human, $sexes); preg_match_all('/\<old\>(.*?)\<\/old\>/s', $human, $olds); } foreach($names[1] as $k=>$name) { echo $names[1][$k].'-'.$sexes[1][$k].'-'.$olds[1][$k]."\n"; } /** 张映->男->28 tank->男->28 **/ // 4. 利用XMLReader获取数据 $reader = new XMLReader(); $reader->open("humans.xml"); $i = 1; while($reader->read()) { if($reader->nodeType == XMLReader::TEXT) { if($i%3) { echo $reader->value; }else { echo $reader->value."\n"; } $i++; } } /** 张映男28 tank男28 **/