接着上次的xml笔记01 ,记录一下如何DOM创建xml
一、由于没有特意来写博客,都是在程序中用注释的方法记录笔记,整理过来难免格式错误,排版什么的,大家好事看不懂就仔细看给出的代码加上注释,一定会看明白的,代码中用到的方法,php手册都有。不知道的可以查手册,这里说说我查手册时的一个总结:
1.DOMNode 类 ,这是一个dom的根类,里面定义了一下属性和方法。比如:$nodeName属性 appendChild方法 等等
2、DOMDocument 类,这是一个文档类,它继承domNode类,里面有自己的属性和方法
3、DOMElement 类,是一个元素类,也是继承domNode类,当然也有自己的属性和方法
4、DOMAttr 类 一个属性类,和上面一样
5、DOMCdataSection类,一个CDATA类,同上
6、DOMText 类,一个文本类,同上
如何创建和使用对应的类?
看上篇博客有这几个对象:
DOMdocument object --> DOMDocument 类
DOMElement Object --> DOMElement 类
DOMText Object --> DOMText 类
DOMNodeList Object 这个是节点列表对象是 对应 DOMNodeList 类
二、现在给出代码,就把注释当做博文吧。
1 <?php 2 /** 3 * 4 * @authors wxb (http://www.cnblogs.com/wxb0328/) 5 * @date 2014-09-30 22:36:02 6 * @version $Id$ 7 */ 8 /* 9 34、DOM创建XML 10 1、再次强调:在xml里,一切皆是节点,包括换行符和空白,都是文本节点(xml是纯文本的,所以这些自然也是节点),下面说的属性也是一个节点,叫做属性节点 11 2、如何生成下面这样的xml文件? 12 <?xml version='1.0' encoding='utf-8' ?> 13 <bookstore> 14 <book id="b001"> 15 <title>路遥-平凡的世界</title> 16 <intro><![CDATA[这是一部经典书籍&老少皆宜]]></intro> 17 </book> 18 </bookstore> 19 DOM怎么创建? 20 方法一:从里往外 21 1、创建 路遥-平凡的世界 文本节点 22 2、创建普通的title节点 23 3、把 路遥-平凡的世界 文本节点,加入到title节点中 24 4、创建CDATA节点 25 5、创建intro节点 26 6、把CDATA节点放到intro节点中 27 7、创建book节点 28 8、把title和intro节点放到book节点中 29 9、创建id属性节点 30 10、把属性节点放到book节点中 31 11、再创建bookstore节点 32 12、把book节点放到bookstore节点中 33 13、把bookstore节点放到文档中 34 方法二:从外往里 35 36 在上面的步骤中我们提取出下面几种操作: 37 1、如何创建文本节点 38 2、如何创建普通节点 39 3、如何创建CDATA节点 40 4、如何创建属性节点 41 5、如何增加子节点 42 下面开始完成这个xml的创建,操作中的方法的具体用法和说明查php手册 43 */ 44 // 创建DOM文档对象 45 $dom = new DOMDocument('1.0','utf-8'); 46 47 // 1、创建文本节点, 48 // 调用createTextNode()方法 49 $text = $dom->createTextNode('路遥-平凡的世界'); 50 // 2、创建title元素 51 $title = $dom->createElement('title'); 52 53 // 3、把 路遥-平凡的世界 文本节点,加入到title节点中 54 $title->appendChild($text); 55 // 4、创建CDATA节点 56 $cdata = $dom->createCDATASection('这是一部经典书籍&老少皆宜'); 57 // 5、创建intro节点 58 $intro = $dom->createElement('intro'); 59 // 6、把CDATA节点放到intro节点中 60 $intro->appendChild($cdata); 61 // 7、创建book节点 62 $book = $dom->createElement('book'); 63 // 8、把title和intro节点放到book节点中 64 $book->appendChild($title); 65 $book->appendChild($intro); 66 // 9、创建id属性节点 67 $id = $dom->createAttribute('id'); 68 $id->value = 'b001'; 69 // 10、把属性节点放到book节点中 70 $book->appendChild($id); 71 // 11、再创建bookstore节点 72 $bookstore = $dom->createElement('bookstore'); 73 // 12、把book节点放到bookstore节点中 74 $bookstore->appendChild($book); 75 // 13、把bookstore节点放到文档中 76 $dom->appendChild($bookstore); 77 78 // 输出看看 79 /* 80 * 81 * 为什么这个方法可以输出,看名字不想啊,查看手册我们可以看到 82 * string DOMDocument::saveXML ([ DOMNode $node [, int $options ]] ) 83 * Returns the XML, or FALSE if an error occurred. 84 * 这个方法,参数可以缺省,返回是一个xml,也就是字符串吧,定义不是:string吗 85 */ 86 //echo $dom->saveXML(); 87 /* 88 * 我们看到结果如图1,页面上什么也没有,但是请注意头部那个标签,我们再右键看源码。如图2 89 * 明白了,之所以没有在页面上看到是因为浏览器解析了我们的这个xml 90 * 那么怎么避免浏览器解析? 91 * 给浏览器发生一个头部信息,告诉浏览器给的是xml 不要解析 92 * header("content-type:text/xml"); 93 * 94 */ 95 //现在我们先注释掉上面的输出,用下面的输出 96 //header("content-type:text/xml"); 97 //echo $dom->saveXML(); 98 // 结果如图3 99 100 /* 现在我们试着将上面生成的xml 保存成一个文件 101 * 使用save()方法 102 * int DOMDocument::save ( string $filename [, int $options ] ) 103 * filename The path to the saved XML document 104 105 */ 106 echo $dom->save('34.xml') ? "ok" : "no"; 107 // 成功生成xml文件,如图4 108 109 /* 110 * 同时,我们发现,生成的这个xml文档,没有任何格式,没有空格、没有换行、一行就完成了。 111 * 这恰恰验证了 上面说的 在xml中一切皆是节点 112 */ 113 114 ?>
图片:
图一
图二
图三:
图四:
好了,就这么多吧,睡觉了。如果有什么错误,欢迎大家批评指正啊。晚安,博客园