您现在的位置:首页 >> 前端 >> 内容

xml基础学习笔记01

时间:2014/9/28 9:05:48 点击:

  核心提示:还是继续学习 燕十八老师传世经典三部曲第三步:xml ,只是学习笔记,基本都是记录老师的讲解,融入了一些自己的认识。不属于原创,原创请看十八哥的视频。默默的给十八哥送上32个赞  前几天刚学了smar...
 还是继续学习 燕十八老师传世经典三部曲第三步:xml ,只是学习笔记,基本都是记录老师的讲解,融入了一些自己的认识。不属于原创,原创请看十八哥的视频。默默的给十八哥送上32个赞

 

  前几天刚学了smarty模板引擎,由于在公司简单的用过,对于一些smarty已经会用了,只是还不是很清楚,就看了看。并没有做什么笔记,模板引擎吗!只要会用就行了,没有必要学习研究太多其中高级的东西,毕竟现在还是掌握更紧要。至于以后经验丰富了和时间允许可以好好看看源码

 

  还是说xml吧,之前简单的看过https://www.w3school.com.cn/ 关于xml的介绍。只是浏览了一边概念,至于到底怎么用,还是没有任何感觉!很多时候都觉得还是需要看着老师或者别人做一下,才能知道这东西什么时候用、在哪里用和怎么用。还是自己有点笨啊!哎。。。

 

  先来copy一段w3school上面关于xml的介绍吧!  

 

    一、什么是 XML?      

      XML 指可扩展标记语言(EXtensible Markup Language)

      XML 是一种标记语言,很类似 HTML

      XML 的设计宗旨是传输数据,而非显示数据

      XML 标签没有被预定义。您需要自行定义标签。

      XML 被设计为具有自我描述性。

      XML 是 W3C 的推荐标准

    

    二、XML 与 HTML 的主要差异

      XML 不是 HTML 的替代。

      XML 和 HTML 为不同的目的而设计:

      XML 被设计为传输和存储数据,其焦点是数据的内容。

      HTML 被设计用来显示数据,其焦点是数据的外观。

      HTML 旨在显示信息,而 XML 旨在传输信息

 

    三、学习笔记

 

     XML语法规范

                1、如何声明一个xml文件?

                        有两部分组成,

                            声明部分,声明xml的版本和编码(版本只有1.0)

                            <?xml version='1.0' encoding='utf-8' ?>

                            文档部分/标签部分/节点部分

                            <节点名></节点名>

                            注意:xml中,节点/元素/标签  都是一个意思

                 2、标签的写法

                        标签必须成对出现,进行闭合

                        如:<name></name>

                        标签区分大小写,在xml中标签全部小写

                        或者作为单标签,自闭和    <name /> (当只有<root></root>跟标签且其中没有内容时,浏览器理解为<root />)

                3、整个文档必须有一个根节点,而且只能有一个根节点

                4、标签可以嵌套,但不能相互嵌套

                        <root><name></root></name> 错误

                5、属性的写法

                        属性必有值,推荐小写,属性值必须用双引号包起来

                6、注释的写法

                        <!-- 这里写xml的注释,xml的注释和html的注释写法 规则是一样的-->

                7、特殊字符需要用实体来代替

                        ‘ -> &apos

                           " -> &quot

                            > -> &gt

                            < -> &lt

                8、如果有大段的文本,比如一篇文章,从数据库里面取出来,里面有大量的 ‘,“,>、<、那岂不是还要用实体替换一边?

                        CDATA    节点来表示

                        CDATA节用来放大段文件,不用考虑实体

                        <![CDATA[          这里面写你的内容       ]]>

                9、在xml里,一切皆是节点,包括换行符和空白,都是文本节点(xml是纯文本的,所以这些自然也是节点)

     

      xml DOM解析xml

                 1、  document.getElementsByTagName();

                        childNodes()

                        这两个方法是不是有些熟悉?

                            答:是的,js、java中都有

                        为什么?

                            因为xml是一种严格的文档格式,尤其自身的标准。解析xml也有其标准,叫Dom标准

                            我们所使用的HTML、xml、都遵循Dom标准

                            这也就是为什么我们看到上面的两个函数很熟悉

                            因为无论是php、java、c、js解析dom树,都遵循同样的DOM标准

                    2、如何通过php的DOM对象来解析xml

                            第一步:要把xml文件读进来,形成一个xml文档对象,<-- 对应js --> document对象

                            第二步:再通过getElementsByTagName('标签名') 得到一组节点 <-- js对应--> document.getElementsByTagName()

                            第三步:再把第二步中,得到的一组对象,取得其中某一个,就得到了具体的节点

                    3、创建DOM解析对象

                            $dom = new DOMdocument('1.0','utf-8');

                            DOMdocument object有什么用?

                                它把xml文件加载到内存并分析,你就可以用object分析xml了

                            载入xml文档

                                    $dom->load('文件地址');

                            得到title节点列表,title节点有很多,因此得到的是’节点列表对象‘

                                    ts=dom->getElementsByTagName('title');

                                    print_r($ts);     // DOMNodeList object()

                            DOMNodelist 节点列表类

                                一个属性:length,代表取得的节点数量

                                一个方法;item(N)代表取得第N个节点

                                    echo 'we get '.$ts->length.' book';

                            DOMElement Object DOM节点对象  

          title0=ts->item(0); // title0就是一个节点对象DOMElementObject()title0->childNodes

          print_r($title0->childNodes); 子节点对象列表 DOMNodeList Object

          选取第一个子节点对象,也就是下面的文本对象

 

 

 

        //这里的子节点列表对象也和上面提到的一样,一个属性和一个方法

 

        text=title0->childNodes->item(0);

                      print_r($text); //DOMText Object ( ) 文本对象

 

                     echo $text->wholeText;

 

    下面给出我的demo

      xml文件

      

复制代码

 1 <?xml version='1.0' encoding='utf-8' ?>

 2 <bookstore>

 3     <book>

 4         <title>路遥-平凡的世界</title>

 5         <price>43</price>

 6     </book>

 7     <book>

 8         <title>曹雪芹-红楼梦</title>

 9         <price>93</price>

10     </book>

11 </bookstore>

复制代码

    php文件

 

复制代码

 1 <?php

 2 header("content-type:text/html;charset=utf-8");

 3 //创建DOM解析对象

 4 $dom = new DOMDocument('1.0','utf-8');

 5 print_r($dom);     // DOMDocument Object ( )    DOM文档对象    

 6 // 载入xml文档

 7 $dom->load('./02.xml');

 8 echo "<br/>";

 9 print_r($dom);    // DOMDocument Object ( )

10 //选取节点,得到节点列表对象 DOMNodeList Object ( )

11 $ts = $dom->getElementsByTagName('title');

12 echo "<br/>";

13 print_r($ts);     // DOMNodeList Object ( )

14 /********************************

15  * DOMNodeList Object ( )

16  * 一个属性:length,代表取得的节点数

17  * 一个方法:item(N),代表取得第N个节点,N从0 开始

18  *

19  * *****************************/

20 echo "<br/>";

21 echo $ts->length;   // 节点列表长度,

22 echo "<br/>";

23 //选取列表中的第一个,得到一个节点对象

24 print_r($ts->item(0));   //DOMElement Object ( )

25 

26 $title0 = $ts->item(0);   // $title0 就是一个节点对象 DOMElement Object ( )

27 echo "<br/>";

28 print_r($title0->childNodes); // DOMNodeList Object ( ) 这里的childNodes 是一个属性,得到的是子节点列表对象

29 /***********************************

30  * 注意在xml中,一切都是节点,包括文本,回车换行

31  * 所以,title中的 ‘路遥-平凡的世界’和title的关系就是父子关系。

32  * 这也就是为什么上面print_r($title0->childNodes); 打印的是 DOMNodeList Object ( ),还是一个节点列表对象

33  **********************************/

34 //选取第一个子节点对象,也就是下面的文本对象

35 //这里的子节点列表对象也和上面提到的一样,一个属性和一个方法

36 $text = $title0->childNodes->item(0); 

37 echo "<br/>";

38 print_r($text);   //DOMText Object ( ) 文本对象

39 

40 echo "<br/>";

41 //我们已经很接近了,我们获得了文本对象,然后只要难道对象内容就行了

42 //使用文本对象的一个属性 wholeText

43 echo $text->wholeText;

44 

45 /***********************************************

46  * 现在,我们捋一捋我们刚才的整个思路

47  * 首相,实例化一个文档对象:DOMDocument Object ,也就是上面的$dom

48  * 其次,调用road方法,载入xml文件 $dom->load('./02.xml');

49  * 然后,通过getElementsByTagName方法 得到一个title节点列表对象:$ts ,DOMNodeList Object

50  * 再然后,我们想得到第一个书名,我们使用item(0)选取列表中的第一个节点对象 DOMElement Object 

51  * 再然后,通过print_r($title0->childNodes) 看到 得到的又是一个节点列表DOMNodeList Object,为什么?上面已经说明,这里就不再多说了

52  * 最后,通过$text = $title0->childNodes->item(0); 选取第一个节点对象,这个对象是一个 DOMText Object ( ) 文本对象

53  * 好了,使用wholeText属性得到信息

54  * 注意:以上的这些操作都是可以连续操作的,下面举例(将第二本书名取出):

55  * ********************************************/

56 echo "<hr/>";

57 echo $dom->getElementsByTagName('title')->item(1)->childNodes->item(0)->wholeText;

58 echo "<hr/>";

59 /**

60  * 这是一种简洁的写法,但是,这个不够正规

61  **/

62 echo $dom->getElementsByTagName('title')->item(1)->nodeValue; 

63 /***************************************

64  * xml 的DOM解析本身是不难的,但是就是解析的太深了、太繁琐了,所以就会显得有些难

65  * 虽然此处似乎有些难,但是很有必要仔细学、慢慢学,一定要弄懂,因为这里说的php中的

66  * 对xml的DOM解析在js、java、C#都是很相似的,甚至和一说一个思想,同样的方法,所以花点

67  * 时间是很值得的!这就有点像正则表达式,只要学会了,那个程序语言中都可以正常使用

68  **************************************/

69 ?>

复制代码

 

 

  好了,暂时就做这些吧,至于老师讲的土豆视频应用的那个,不是我没做,我整了老长时间,硬是找不到土豆那个app应用申请在哪里,优酷的我看返回的是json格式,哎,就没有上手做。有时间了看看json ,做做优酷

  夜深了,该睡觉了!程序员可能就这命吧,白天静不下心,也只有晚上才能静静地学习和做东西。

  这几天,总会听到一些很打击自己的事情,一个同学说:我们初中一起念书的女生入职 去哪了 工资8K,我真的不敢相信了,一个应届毕业生、西安邮电、计算机专业,8K北京。我西安3K 。这是什么事啊!心里有点堵

  可是仔细想想,这年头谁还说真话啊,再说了都是人传人,而且我的一个好哥们和那女生都是西安邮电计算机一个班,我就没有听他说起过,而且我哥们在校时就很强了,ios开发,也没听他说他8K啊。哎。。。老是听这些,真闹心!

  还是督促自己好好学习吧,慢慢积累经验。我真的觉得自己并没有在编程上有多少天赋,只是和普通的程序员一样,对程序能想得通,学学也会做,可能比一些牛人花时间多一些。但是我觉得:还是踏踏实实,慢慢学着,别着急。这个行业不会看不到你的努力,这个行业肯定会给你应得的东西。

  哈哈。。。。扯远了!大家轻喷啊

Tags:XM ML L基 基础 
作者:网络 来源:不详