接着上次的xml笔记01 ,记录一下如何DOM创建xml

  一、由于没有特意来写博客,都是在程序中用注释的方法记录笔记,整理过来难免格式错误,排版什么的,大家好事看不懂就仔细看给出的代码加上注释,一定会看明白的,代码中用到的方法,php手册都有。不知道的可以查手册,这里说说我查手册时的一个总结:

    1.DOMNode 类 ,这是一个dom的根类,里面定义了一下属性和方法。比如:属性 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 类

  二、现在给出代码,就把注释当做博文吧。

    

 <?php
/**
*
* @authors wxb (http://www.cnblogs.com/wxb0328/)
* @date 2014-09-30 22:36:02
* @version $Id$
*/
/*
34、DOM创建XML
1、再次强调:在xml里,一切皆是节点,包括换行符和空白,都是文本节点(xml是纯文本的,所以这些自然也是节点),下面说的属性也是一个节点,叫做属性节点
2、如何生成下面这样的xml文件?
<?xml version='1.0' encoding='utf-8' ?>
<bookstore>
<book id="b001">
<title>路遥-平凡的世界</title>
<intro><![CDATA[这是一部经典书籍&老少皆宜]]></intro>
</book>
</bookstore>
DOM怎么创建?
方法一:从里往外
1、创建 路遥-平凡的世界 文本节点
2、创建普通的title节点
3、把 路遥-平凡的世界 文本节点,加入到title节点中
4、创建CDATA节点
5、创建intro节点
6、把CDATA节点放到intro节点中
7、创建book节点
8、把title和intro节点放到book节点中
9、创建id属性节点
10、把属性节点放到book节点中
11、再创建bookstore节点
12、把book节点放到bookstore节点中
13、把bookstore节点放到文档中
方法二:从外往里 在上面的步骤中我们提取出下面几种操作:
1、如何创建文本节点
2、如何创建普通节点
3、如何创建CDATA节点
4、如何创建属性节点
5、如何增加子节点
下面开始完成这个xml的创建,操作中的方法的具体用法和说明查php手册
*/
// 创建DOM文档对象
$dom = new DOMDocument('1.0','utf-8'); // 1、创建文本节点,
// 调用createTextNode()方法
$text = $dom->createTextNode('路遥-平凡的世界');
// 2、创建title元素
$title = $dom->createElement('title'); // 3、把 路遥-平凡的世界 文本节点,加入到title节点中
$title->appendChild($text);
// 4、创建CDATA节点
$cdata = $dom->createCDATASection('这是一部经典书籍&老少皆宜');
// 5、创建intro节点
$intro = $dom->createElement('intro');
// 6、把CDATA节点放到intro节点中
$intro->appendChild($cdata);
// 7、创建book节点
$book = $dom->createElement('book');
// 8、把title和intro节点放到book节点中
$book->appendChild($title);
$book->appendChild($intro);
// 9、创建id属性节点
$id = $dom->createAttribute('id');
$id->value = 'b001';
// 10、把属性节点放到book节点中
$book->appendChild($id);
// 11、再创建bookstore节点
$bookstore = $dom->createElement('bookstore');
// 12、把book节点放到bookstore节点中
$bookstore->appendChild($book);
// 13、把bookstore节点放到文档中
$dom->appendChild($bookstore); // 输出看看
/*
*
* 为什么这个方法可以输出,看名字不想啊,查看手册我们可以看到
* string DOMDocument::saveXML ([ DOMNode $node [, int $options ]] )
* Returns the XML, or FALSE if an error occurred.
* 这个方法,参数可以缺省,返回是一个xml,也就是字符串吧,定义不是:string吗
*/
//echo $dom->saveXML();
/*
* 我们看到结果如图1,页面上什么也没有,但是请注意头部那个标签,我们再右键看源码。如图2
* 明白了,之所以没有在页面上看到是因为浏览器解析了我们的这个xml
* 那么怎么避免浏览器解析?
* 给浏览器发生一个头部信息,告诉浏览器给的是xml 不要解析
* header("content-type:text/xml");
*
*/
//现在我们先注释掉上面的输出,用下面的输出
//header("content-type:text/xml");
//echo $dom->saveXML();
// 结果如图3 /* 现在我们试着将上面生成的xml 保存成一个文件
* 使用save()方法
* int DOMDocument::save ( string $filename [, int $options ] )
* filename The path to the saved XML document */
echo $dom->save('34.xml') ? "ok" : "no";
// 成功生成xml文件,如图4 /*
* 同时,我们发现,生成的这个xml文档,没有任何格式,没有空格、没有换行、一行就完成了。
* 这恰恰验证了 上面说的 在xml中一切皆是节点
*/ ?>

图片:

图一

xml基础学习笔记02-LMLPHP

图二

xml基础学习笔记02-LMLPHP

图三:

xml基础学习笔记02-LMLPHP

xml基础学习笔记02-LMLPHP

图四:

xml基础学习笔记02-LMLPHP

  好了,就这么多吧,睡觉了。如果有什么错误,欢迎大家批评指正啊。晚安,博客园

05-04 02:08