1、通过DOM生成XML
通过DOM扩展来创建一个DOMDocument对象,在建立了文档后,调用DOMDocument::svae()或DOMDocument::saveXML()方法生成一个格式良好的XML文档。
遵循的模式就是:创建一个元素或者文本节点对象,添加或设置想要的属性,然后添加到所属的位置上。
$dom = new DOMDocument('1.0','UTF-8');
$book = $dom->appendChild($dom->createElement('book','pan\'s book'));
$title = $book->appendChild($dom->createElement($key));
$title->appendChild($dom->createTextNode($value));
$title->setAttribute('cover', 'soft');
$author = $book->appendChild($dom->createElement('author'));
$author->appendChild($dom->createTextNode('pan'));
$date = $book->appendChild($dom->createElement('date'));
$date->appendChild($dom->createTextNode('2015-10-1'));
$dom->saveXML();
。首先是创建一个新文档对象,并可传递一个XML版本号和编码;
。再就是创建一个属于新文档的新节点,节点在被添加之前是不会被加入到文档树中的;
。所有的节点都是通过调用$dom对象创建的,在创建节点后,可以把该节点添加到树中的任何位置上,调用appendChild()方法的那个元素决定了节点在树中所处的位置;
。要在节点中添加文本内容,可以调用createTextNode()创建一个文本,然后将这个文本添加到节点中;
。要为节点添加属性,可以早节点上调用setAttribute()方法,并传递属性的名和值作为参数;
。完成之后,可以把文档作为字符串输出(saveXML()),也可以输出到为一个文件(save($file))。
。控制输出的格式良好的文档:$dom->formatOutput=true;
2、解析基本的XML文档 — SimpleXML
SimpleXML把元素转换成对象属性,位于标签之间的文本被指定给属性。如果同一个标签有多个同名元素,则这些元素的值将被放在一个列表中返回。
元素的属性会被转换为数组结构,其中数组的键时属性名,键的值就是属性的值。
缺点:必须事先知道XML文件的格式;不能访问处理指令或注释。
解析:
$bookss = simplexml_load_file('a.xml');
var_dump($bookss->book[1]->title); //等价于var_dump($bookss->{'book'}[1]->title);
修改:
$xml = simplexml_load_file('a.xml');
$xml->book[0]->title = 'js';
$xml->asXML('b.xml');
添加:
$character = $movies->movie[0]->characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $movies->movie[0]->addChild('rating', 'PG');
$rating->addAttribute('type', 'mpaa');
$movies->asXML('c.xml');
补充:simplexml_load_string() — 将xml格式的字符串转换成array数组
$string = <<<XML
<?xml version='1.0'?>
<document>
<title>Forty What?</title>
<from>Joe</from>
<to>Jane</to>
<body>
I know that's the answer -- but what's the question?
</body>
</document>
XML;
$xml = simplexml_load_string($string);
print_r($xml);
3、解析复杂的XML文档 — DOM扩展
能够在不知道xml格式的情况下分析xml,还能处理xml高级特性。