Posted in PHP onJanuary 12, 2013
一.使用DOM生成和读取XML文件
实例一:
<?php //Creates XML string and XML document using the DOM $dom = new DomDocument('1.0'); //add root - <books> $books = $dom->appendChild($dom->createElement_x_x ('books')); //add <book> element to <books> $book = $books->appendChild($dom->createElement_x_x ('book')); //add <title> element to <book> $title = $book->appendChild($dom->createElement_x_x ('title')); //add <title> text node element to <title> $title->appendChild($dom->createTextNode('Great American Novel')); //generate xml $dom->formatOutput = true; // set the formatOutput attribute of domDocument to true //save XML as string or file $test1 = $dom->saveXML(); // put string in test1 $dom -> save('test1.xml'); // save as file ?>
实例二:
$aa = "111"; $xmlstr = <<<XML <?xml version='1.0'?> <document> <title>{$aa}</title> <from>Joe</from> <to>Jane</to> <body> I know that's the answer -- but what's the question? </body> </document> XML; $dom = new domDocument; $dom->loadXML($xmlstr); $test1 = $dom->saveXML(); $dom->save('test1.xml');
实例三:
test1.xml:
<?xml version="1.0"?> <books> <book> <author>Jack Herrington</author> <title>PHP Hacks</title> <publisher>O'Reilly</publisher> </book> <book> <author>Jack Herrington</author> <title>Podcasting Hacks</title> <publisher>O'Reilly</publisher> </book> </books>
example.php:
$doc = new DOMDocument(); $doc->load('test1.xml'); $books = $doc->getElementsByTagName("book"); foreach($books as $book){ $authors = $book->getElementsByTagName("author"); $author = $authors->item(0)->nodeValue; $publishers = $book->getElementsByTagName( "publisher" ); $publisher = $publishers->item(0)->nodeValue; $titles = $book->getElementsByTagName( "title" ); $title = $titles->item(0)->nodeValue; echo "$title - $author - $publisher\n"; }
二.使用simple生成和读取xml文件
实例一:
<? $xmlstr = <<<XML <?xml version='1.0' standalone='yes'?> <books> <book> <title>Great American Novel</title> <characters> <character> <name>Cliff</name> <desc>really great guy</desc> </character> <character> <name>Lovely Woman</name> <desc>matchless beauty</desc> </character> <character> <name>Loyal Dog</name> <desc>sleepy</desc> </character> </characters> <plot> Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark at mailman. </plot> <success type='bestseller'>4</success> <success type='bookclubs'>9</success> </book> </books> XML; //提取节点内容 $xml = new SimpleXMLElement($xmlstr); foreach ($xml->book[0]->success as $success) { switch((string) $success['type']) { // Get attributes as element indices case 'bestseller': echo $success. ' months on bestseller list<br>'; break; case 'bookclubs': echo $success. ' bookclub listings'; break; } } //修改文本节点内容 $xml = new SimpleXMLElement($xmlstr); $xml->book[0]->characters->character[0]->name = 'Big Cliff'; echo $xml->asXML(); //添加子元素的文本节点 $xml = new SimpleXMLElement($xmlstr); $character = $xml->book[0]->characters->addChild('character'); $character->addChild('name', 'Yellow Cat'); $character->addChild('desc', 'aloof'); $success = $xml->book[0]->addChild('success', '2'); $success->addAttribute('type', 'reprints'); echo $xml->asXML(); ?>
实例二:
if (file_exists('test1.xml')) { //读取xml文件 $xml = simplexml_load_file('test1.xml'); var_dump(xml); } else { exit('Failed to open test1.xml.'); }
三.DOM和simple互操作
DOM导入simpleXML:
<?php $sxe = simplexml_load_string('<books><book><title>Great American Novel</title></book></books>'); if ($sxe === false) { echo 'Error while parsing the document'; exit; } $dom_sxe = dom_import_simplexml($sxe); if (!$dom_sxe) { echo 'Error while converting XML'; exit; } $dom = new DOMDocument('1.0'); $dom_sxe = $dom->importNode($dom_sxe, true); $dom_sxe = $dom->appendChild($dom_sxe); $test2 = $dom->saveXML(); // put string in test2 $dom -> save('test2.xml'); // save as file ?>
simpleXML导入DOM:
<?php $dom = new domDocument; $dom->loadXML('<books><book><title>Great American Novel</title></book></books>'); if (!$dom) { echo 'Error while parsing the document'; exit; } $s = simplexml_import_dom($dom); echo $s->book[0]->title; // Great American Novel ?>
用PHP编写和读取XML的几种方式
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@