【xml】xml概念

1、什么是XML
2、XML与HTML的不同
3、为什么要使用xml
4、怎么使用xml

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,
    都是SGML(Standard Generalized Markup Language,标准通用标记语言)。
    Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。
    扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,
    而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,
    但XML极其简单易于掌握和使用。

XML和HTML的不同可以归纳为3点:
  ① XML扩展性比HTML强
    XML(Extensible Markup Languages)是扩展标记语言的英语缩写,
     他可以创建个性化的标记语言,可以称之为元语言。XML的标记语言可以自定义,
     这样可以提供更多的数据操作,而不像HTML一样,只能局限于按一定的格式在终端显示出来。
     HTML的功能只有浏览器放入显示和打印,仅仅适合静态网页的要求。
  ② XML的语法比HTML严格
     由于XML的扩展性强,它需要稳定的基础规则来支持扩展。它的严格规则为:
     1、起始和结束的标签相匹配
     2、嵌套标签不能相互嵌套
     3、区分大小写
     相对应XML的严格规则,HTML语言并没有规定标签的绝对位置,也不区分大小写,
     而这些全部由浏览器来完成识别和更正。
  ③ XML与HTML互补
    XML可以获得应用之间的相应信息,提供终端的多项处理要求,也能被其他的解析器和工具所使用,
     在现阶段,XML可以转化成相应的HTML,来适应当前浏览器的需求。

为什么要使用xml
    1、数据交换
    2、信息存储,内容管理
    3、XML 文件易读且结构清楚合理

我们把符合 XML 语法的文档称为形式良好的 XML 文档,比如:
    * 它必须以 XML 声明开头
    * 它必须拥有唯一的根元素
    * 开始标签必须与结束标签相匹配
    * 元素对大小写敏感
    * 所有的元素都必须关闭
    * 所有的元素都必须正确地嵌套
    * 必须对特殊字符使用实体

在XML中,采用了如下的语法:
  1 任何的起始标签都必须有一个结束标签。
  2 可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。
     这种语法是在大于符号之前紧跟一个斜线(/),例如<tag />。
     XML解析器会将其翻译成<tag></tag>。
  3 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,
     例如this is a samplestring。
     这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,
     是不能关闭外面的括号的。
  4 所有的属性都必须有值。
  5 所有的属性都必须在值的周围加上双引号。

学习目标
    掌握DOM方式解析XML,
    掌握DOM方式创建XML
    掌握simplexml方式解析xml
    了解SAX方式解析XML

XML与HTML的设计区别是:
    XML是用来存储数据的,重在数据本身。而HTML是用来定义数据的,重在数据的显示模式


DTD:(Document type define)文档类型定义


结构良好的XML文档
  如果某个文档符合XML语法规范,那么我们就说这个文档是“结构良好”的文档

有效的XML文档
   所谓有效的XML文档是指通过了DTD的验证的,具有良好结构的XML文档,
    在此大家要明白 XML文档可分为结构良好的XML文档和有效的XML文档,以及他们之间的关系。
    即具有结构良好的XML文档并不一定就是有效的XML文档,
    反之一个有效的XML文档必定是一个结构良好的XML文档。

XML 的优势有以下六个方面
    1 XML可以从HTML中分离数据
    2 XML用于交换数据
    3 XML和B2B (business)
    4 XML可以用于共享数据
    5 XML可以充分利用数据
    6 XML可以用于创建新的语言

DOM方式解析XML
    $dom = new DOMdocument('1.0','utf-8');
    $dom -> load('./book.xml');

    //***获取具体节点信息
    $mm = $dom -> getElementsByTagName('mm');
    var_dump($mm -> item(1)-> nodeValue);

    //***获取多个节点信息
    $authors = $dom -> getElementsByTagName('author');
    foreach($authors as $author){
        $mm = $author -> getElementsByTagName('mm');
        echo $mm -> item(0) -> nodeValue;
    }
    exit;

    //***解析xml全部节点信息
    $data = array();//使用该数组变量接收信息
    /**
        $data[1]['introduce']    = '主要介绍ZendFramework,作者代码值得学习';
        $data[1]['author']['mm'] = '章鱼';
        $data[1]['author']['nn'] = '带鱼';
        $data[2]['introduce']    = '深入设计模式、PHP标准库和JSON';
        $data[2]['author']['mm'] = '鳄鱼';
        $data[2]['author']['nn'] = '鲨鱼';
    */
    $books = $dom -> getElementsByTagName('book');
    foreach($books as $book){
        $no = $book -> getAttribute('no');//获得一维xml信息编号

        //获得nn信息
        $nn = $book -> getElementsByTagName('nn');
        $nn_value = $nn -> item(0) -> nodeValue;
        $data[$no]['author']['nn'] = $mm_value;

        //获得mm信息
        $mm = $book -> getElementsByTagName('mm');
        $mm_value = $mm -> item(0) -> nodeValue;
        $data[$no]['author']['mm'] = $mm_value;

        //获得introduce信息
        $introduce = $book -> getElementsByTagName('introduce');
        $introduce_value = $introduce -> item(0) -> nodeValue;
       
        $data[$no]['introduce'] = $introduce_value;
    }
    print_r($data);
    exit;

DOM方式创建XML
    核心方法:
        createElement   创建元素
        createTextNode  创建内容
        appendChild     追加节点

    $book = array();
    $data[] = array(
        'title' => 'java book',
        'author' => array(
            'one' => 'gaoqian',
            'two' => 'lihongqiang',
        ),
        'desn' => "very good !!!"
    );
    $data[] = array(
        'title' => 'php oop',
        'author' => array(
            'one' => 'sunwen',
            'two' => 'gulong',
        ),
        'desn' => "good very good"
    );
    $doc = new DOMDocument('1.0','utf-8');
    $doc->formatOutput = true;//输出内容时自动格式化代码
    $r = $doc->createElement("books");
    $doc->appendChild($r);//为xml文档追加子节点

    foreach($data as $_v){
        $book = $doc -> createElement('book');

        $title = $doc -> createElement('title');
        $title_text = $doc -> createTextNode($_v['title']);
        $title -> appendChild($title_text);//将节点内容添加到节点
        $book -> appendChild($title);//将节点添加到对应的上级节点上

        $desn = $doc -> createElement('desn');
        $desn_text = $doc -> createTextNode($_v['desn']);
        $desn -> appendChild($desn_text);//将节点内容添加到节点
        $book -> appendChild($desn);//将节点添加到对应的上级节点上
       
        $author = $doc -> createElement('author');//创建author节点

            $one = $doc -> createElement('one');
            $one_text = $doc -> createTextNode($_v['author']['one']);
            $one -> appendChild($one_text);
            $author -> appendChild($one);

            $two = $doc -> createElement('two');
            $two_text = $doc -> createTextNode($_v['author']['two']);
            $two -> appendChild($two_text);
            $author -> appendChild($two);

        $book -> appendChild($author);//将节点追加到上级节点

        $r -> appendChild($book);//将book追加到根节点
    }
    $xml = $doc->saveXML();
    file_put_contents('./data.xml',$xml);

SimpleXml方式解析xml
    simplexml_load_string //echo $str->book->introduce;
    simplexml_load_file('./book.xml'); //echo $xml -> book[0] -> introduce;

<bawei>
 <student>
  <name>pujing</name>
  <xueli>大学</xueli>
  <detail>
   <hobby>篮球</hobby>
   <qq>78297398</qq>
   <sex>man</sex>
  </detail>
 </student>
 <student>
  <name>aobama</name>
  <xueli>初中</xueli>
  <detail>
   <hobby>高尔夫</hobby>
   <qq>977655</qq>
   <sex>man</sex>
  </detail>
 </student>
</bawei>
$student[0] = array(
 'name' => 'pujing',
 'xueli' => '大学',
 'detail' => array(
  'hobby' => '篮球',
  'qq'    => '7823232',
  'sex'   => 'man',
 )
);
$student[1] = array(
 'name' => 'aobama',
 'xueli' => '初中',
 'detail' => array(
  'hobby' => '高尔夫',
  'qq'    => '977232283',
  'sex'   => 'man',
 )
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值