zoukankan      html  css  js  c++  java
  • XML数据格式

    XML: 可扩展的标记语言(用户自定义的标记语言)

      用途:数据跨平台的存储,传输,共享的;在不同的语言之间也可以通信

    XML基本语法格式:

      文件扩展名必须以.xml结束(.html)

      xml中第一个标签叫文档标签

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

        Version:xml版本是1.0

        Encoding:xml文档编码

      xml中所有的标签都是用户自定义的,且区分大小写

        <div></DIV> != <DIV></DIV>    <div></div>  <hr/><br/>

      xml中所有的标签都是成对出现了,有开始,必须有结束,除非中间没有内容,可以使用单标签来代替  <br/>  <hr/>

        <student></student>  =  <student/>

      xml文件中有且只有一个最大的根节点。

      xml中嵌套必须合理,且每一个节点有且只有 一个直接的父级节点。

        <div><p></p></div>  <student><age></age></studetn>

      xml中的空格保留,不能随便乱打空格。

        <div></div>  <p></p >   #这里p后面多个空格系统就无法识别了#

      xml中的属性必须使用单引号和双引号括起来。

        <font size="2"></font>

    XML用途:

      RSS订阅/xml订阅 - 基本不用了

      百度地图(百度标签定义)  .xml

      第三方平台api接口的提交和返回值, xml格式的数据和json格式

    Thinksite

    Student

    Sid  sname  addr  age

    1001    tom   UK   30

    1002    lily   USA   25

      【Student.xml】

    <?xml version="1.0" encoding="utf-8"?>
    <thinksite>
        <student>
            <stu>
                <sid>1001</sid>
                <sname>tom</sname>
                <addr>UK</addr>
                <age>30</age>
            </stu>
            <stu>
                <sid>1002</sid>
                <sname>lily</sname>
                <addr>USA</addr>
                <age>25</age>
            </stu>
        </student>
    </thinksite>

    XML生成:

      字符串的链接:

      【sutdent.php】

    <?php
    $dsn = "mysql:host=localhost;dbname=thinkshop";
    $user= "root";
    $pwd = "123456";
    
    try{
        $pdo = new PDO($dsn,$user,$pwd);
    }catch(PDOException $e){
        echo $e -> getMessage();
    }
    
    $pdo -> exec("set names utf8");
    $sql = "select * from marks";
    $result = $pdo -> query($sql);
    $result -> setFetchMode(PDO::FETCH_ASSOC);
    $data =  $result-> fetchAll();
    
    $xml = "<?xml version='1.0' encoding='utf-8'?>";
    $xml .= "<thinkshop>";
    $xml .= "<marks>";
    
    foreach($data as $key=>$vo){
        $xml .= "<records>";
        foreach($vo as $k=> $v)
            $xml .= "<{$k}>".$v."</$k>";
        $xml .= "</records>";
    }
    
    $xml .= "</marks>";
    $xml .= "</thinkshop>";
    
    $fp = fopen("markxml.xml","w");
    fwrite($fp,$xml);
    fclose($fp);

    DOM生成:

      $dom = new DOMDocument(版本号, 编码)

      $dom -> createElement("创建元素节点");

      $dom -> createTextNode("创建文本节点");

      $dom节点对象 -> setAttribute("属性名","值");

      节点 -> appendChild(子节点)  将子节点,追加到节点上

      Save(文件名): 将domxml对象保存成某个文件

      Savexml():使用dom生成xml内容的字符串

      【marks.php】

    <?php
    $dsn = "mysql:host=localhost;dbname=thinkshop";
    $user= "root";
    $pwd = "";
    
    try{
        $pdo = new PDO($dsn,$user,$pwd);
    }catch(PDOException $e){
        echo $e -> getMessage();
    }
    
    $pdo -> exec("set names utf8");
    $sql = "select * from marks";
    $result = $pdo -> query($sql);
    $result -> setFetchMode(PDO::FETCH_ASSOC);
    $data =  $result-> fetchAll();
    
    $dom = new DomDocument("1.0","utf-8");
    $root = $dom -> createElement("thinkshop");
    $dom -> appendChild($root);
    $marks = $dom -> createElement("marks");
    $root -> appendChild($marks);
    
    foreach($data as $vo){
        $records = $dom -> createElement("records");
        $marks->appendChild($records);
        foreach($vo as $k=>$v){
            $nodes = $dom -> createElement($k);
            $nodes -> setAttribute("name","s");
            $records -> appendChild($nodes);
            $nodes_text = $dom -> createTextNode($v);
            $nodes -> appendChild($nodes_text);
        }
    }
    
    $dom -> save("domxml.xml");
    ?>
    <a href="./domxml.xml">xml订阅</a>

    XML的发布:

      就是在外部网站中使用a链接,将需要发布的xml文件,做a链接指向就行。

    XML的解析: 将xml文件解析成网页或者得到需要的数据格式。

      simplexml解析:  php内置的一个xml解析扩展类库(默认开启了)

      children():  返回某个simplexml节点对象的所有子节点对象。

      simplexml_load_stirng(xml内容字符串):  将xml字符串转换成simplexml节点对象

      【marks1.php】

    <?php
    $dsn = "mysql:host=localhost;dbname=thinkshop";
    $user= "root";
    $pwd = "";
    
    try{
        $pdo = new PDO($dsn,$user,$pwd);
    }catch(PDOException $e){
        echo $e -> getMessage();
    }
    
    $pdo -> exec("set names utf8");
    $sql = "select * from marks";
    $result = $pdo -> query($sql);
    $result -> setFetchMode(PDO::FETCH_ASSOC);
    $data =  $result-> fetchAll();
    
    $xml = "<?xml version='1.0' encoding='utf-8'?>";
    $xml .= "<thinkshop>";
    $xml .= "<marks>";
    foreach($data as $key=>$vo){
        $xml .= "<records>";
        foreach($vo as $k=> $v)
            $xml .= "<{$k}>".$v."</$k>";
        $xml .= "</records>";
    }
    
    $xml .= "</marks>";
    $xml .= "</thinkshop>";
    
    // 就是将xml内容取出具体的数据信息,这种操作就是xml解析.
    
    $simple = simplexml_load_string($xml);
    foreach($simple ->children() as $vo){
        foreach($vo ->children() as $v){
            echo $v -> mid."/".$v->sid."/".$v->cid."/".$v->mark;
            echo "<hr/>";
        }
    }

      Simplexml_load_file(文件路径+文件名): 将xml文件读取转换成simplexml节点对象

      【marks2.php】

    <?php
    $file = "domxml.xml";
    // 就是将xml内容取出具体的数据信息,这种操作就是xml解析.
    $simple = simplexml_load_file($file);
    foreach($simple ->children() as $vo){
        foreach($vo ->children() as $v){
            echo $v -> mid."/".$v->sid."/".$v->cid."/".$v->mark; 
            echo "<hr/>";
        }
    }
    ?>

      Simplexml_import_dom(): 将DOM对象DOM节点对象转换成simplexml节点对象。

       【marks3.php】

    <?php
    $dsn = "mysql:host=localhost;dbname=thinkshop";
    $user= "root";
    $pwd = "";
    
    try{
        $pdo = new PDO($dsn,$user,$pwd);
    }catch(PDOException $e){
        echo $e -> getMessage();
    }
    
    $pdo -> exec("set names utf8");
    $sql = "select * from marks";
    $result = $pdo -> query($sql);
    $result -> setFetchMode(PDO::FETCH_ASSOC);
    $data =  $result-> fetchAll();
    $dom = new DomDocument("1.0","utf-8");
    $root = $dom -> createElement("thinkshop");
    $dom -> appendChild($root);
    $marks = $dom -> createElement("marks");
    $root -> appendChild($marks);
    
    foreach($data as $key=>$vo){
        $records = $dom -> createElement("records");
        $marks->appendChild($records);
        foreach($vo as $k=>$v){
            $nodes = $dom -> createElement($k);
            $nodes -> setAttribute("name","s");
            $records -> appendChild($nodes);
            $nodes_text = $dom -> createTextNode($v);
            $nodes -> appendChild($nodes_text);
        }
    }
    
    // 就是将xml内容取出具体的数据信息,这种操作就是xml解析.
    
    $simple = simplexml_import_dom($dom);
    foreach($simple ->children() as $vo){
        foreach($vo ->children() as $v){
            echo $v -> mid."/".$v->sid."/".$v->cid."/".$v->mark;
            echo "<hr/>";
        }
    }
    ?>

    DOM解析: PHP内置的一个使用DOM解析xml的扩展类库

      创建DOM对象:

        $dom = new DomDocument();

        $dom -> load(“文件/字符串”):  将xml文件或者是字符串加载成dom对象

      $root = $dom -> documentElement

      遍历内部所有节点

        childNodes:返回的是某个节点下的所有的子节点

        getAttribute();

        NodeType

        Nodevalue

      xml层级比较多,遍历时很麻烦,这个时候再simplexml中提供了xpath定位,在dom中有getElementByTagName() 方法。

      【dom.php】

    <?php
     $file = "domxml.xml";
     $dom = new DomDocument();
     $dom -> load($file);
     $root = $dom -> documentElement;
     foreach($root->childNodes as $vo){
         foreach($vo->childNodes as $v){
              foreach($v->childNodes as $v1){
                if($v1 -> nodeType ==1){
                    echo $v1 -> nodeValue;
                }
                echo "<hr/>";
              }
         }
     }
     // 层级太多,使用xpath
     $objs = $dom -> getElementsByTagName("records");
     foreach($objs as $vo){
         foreach($vo -> childNodes as $v){
            if($v -> nodeType ==1){
                echo $v -> nodeValue;
            }
         }
     }
    ?>

    css解析:就是使用css,将xml内容解析成需要的网页样式(XSL)。

      <?xml-stylesheet type="text/css" href="cssfile"?> 使用标签选择器比较多。

      xmlreader(xmlwriter):PHP内置的一个xml解析扩展类库

      Simplexml和dom都是将xml内容一次性读入内存中进行解析。缺点就是如果文件很大,那么浪费资源很严重,且速度很慢。

      Xmlreader可以边加载,边读取xml内容,对于大文件xml解析是一种较好的解决方法.

        创建xmlreader对象。

        $reader = new XmlReader();

      打开xml文件

        $reader -> open(“xml文件”);

      读取xml内容

        $reader -> read();从xml文件一个个的挨着读取内容,每读取一条内容就跳转到下一条,直到没有内容,就会报出false错误。(php文件按行读取)

      nodeType:返回的是节点类型

        xmlReader::ELEMENT    元素节点

        xmlReader::TEXT        文本节点

        Name:  返回某个节点的标签名

        Value:  返回某个节点的文本内容

      expand():读取一个节点转变为dom节点对象

  • 相关阅读:
    第二冲刺阶段第一天
    spring第二冲刺阶段第八天
    spring第二冲刺阶段第七天
    spring第二冲刺阶段第六天
    spring第二冲刺阶段第五天
    spring冲刺第二阶段第四天
    spring第二阶段冲刺第三天
    spring冲刺第二阶段第二天
    SPRING冲刺第二阶段第一天
    spring第一冲刺阶段总结200zi
  • 原文地址:https://www.cnblogs.com/shuo-128/p/6921913.html
Copyright © 2011-2022 走看看