• 周一. 5月 27th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

xml基础学习笔记01

admin

11月 28, 2021

     注意:刚刚看了网上对于XML中的标签,节点和元素?到底应该怎么表述?起初我也有这个疑惑,现在我的想法是:下面出现node的应称作节点,节点对象。element应称作元素,毕竟这更符合英文的本意。至于标签,我们可以将<></>称作标签,但只限于这些尖括号。其实没有必要这么咬文嚼字,这些只是便于我们准确的交流,可以让人清楚的理解你所说的是什么,终于的是你知道这个元素或标签指的是什么。

     这里给一个w3school上面关于XML元素定义:

     XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

     元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

(201409290041)

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

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

  还是说xml吧,之前简单的看过http://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 就是一个节点对象 DOMElement Object ( )
          $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啊。哎。。。老是听这些,真闹心!
  还是督促自己好好学习吧,慢慢积累经验。我真的觉得自己并没有在编程上有多少天赋,只是和普通的程序员一样,对程序能想得通,学学也会做,可能比一些牛人花时间多一些。但是我觉得:还是踏踏实实,慢慢学着,别着急。这个行业不会看不到你的努力,这个行业肯定会给你应得的东西。
  哈哈。。。。扯远了!大家轻喷啊

《xml基础学习笔记01》有一个想法
  1. Wow, amazing weblog layout! How long have you ever been blogging for?
    you make blogging look easy. The overall look of your website is magnificent, let
    alone the content material! You can see similar here ecommerce

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注