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】

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <thinksite>
  3. <student>
  4. <stu>
  5. <sid>1001</sid>
  6. <sname>tom</sname>
  7. <addr>UK</addr>
  8. <age>30</age>
  9. </stu>
  10. <stu>
  11. <sid>1002</sid>
  12. <sname>lily</sname>
  13. <addr>USA</addr>
  14. <age>25</age>
  15. </stu>
  16. </student>
  17. </thinksite>

 

XML生成:

  字符串的链接:

  【sutdent.php】

  1. <?php
  2. $dsn = "mysql:host=localhost;dbname=thinkshop";
  3. $user= "root";
  4. $pwd = "123456";
  5. try{
  6. $pdo = new PDO($dsn,$user,$pwd);
  7. }catch(PDOException $e){
  8. echo $e -> getMessage();
  9. }
  10. $pdo -> exec("set names utf8");
  11. $sql = "select * from marks";
  12. $result = $pdo -> query($sql);
  13. $result -> setFetchMode(PDO::FETCH_ASSOC);
  14. $data = $result-> fetchAll();
  15. $xml = "<?xml version=\'1.0\' encoding=\'utf-8\'?>";
  16. $xml .= "<thinkshop>";
  17. $xml .= "<marks>";
  18. foreach($data as $key=>$vo){
  19. $xml .= "<records>";
  20. foreach($vo as $k=> $v)
  21. $xml .= "<{$k}>".$v."</$k>";
  22. $xml .= "</records>";
  23. }
  24. $xml .= "</marks>";
  25. $xml .= "</thinkshop>";
  26. $fp = fopen("markxml.xml","w");
  27. fwrite($fp,$xml);
  28. fclose($fp);

 

DOM生成:

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

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

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

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

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

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

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

  【marks.php】

  1. <?php
  2. $dsn = "mysql:host=localhost;dbname=thinkshop";
  3. $user= "root";
  4. $pwd = "";
  5. try{
  6. $pdo = new PDO($dsn,$user,$pwd);
  7. }catch(PDOException $e){
  8. echo $e -> getMessage();
  9. }
  10. $pdo -> exec("set names utf8");
  11. $sql = "select * from marks";
  12. $result = $pdo -> query($sql);
  13. $result -> setFetchMode(PDO::FETCH_ASSOC);
  14. $data = $result-> fetchAll();
  15. $dom = new DomDocument("1.0","utf-8");
  16. $root = $dom -> createElement("thinkshop");
  17. $dom -> appendChild($root);
  18. $marks = $dom -> createElement("marks");
  19. $root -> appendChild($marks);
  20. foreach($data as $vo){
  21. $records = $dom -> createElement("records");
  22. $marks->appendChild($records);
  23. foreach($vo as $k=>$v){
  24. $nodes = $dom -> createElement($k);
  25. $nodes -> setAttribute("name","s");
  26. $records -> appendChild($nodes);
  27. $nodes_text = $dom -> createTextNode($v);
  28. $nodes -> appendChild($nodes_text);
  29. }
  30. }
  31. $dom -> save("domxml.xml");
  32. ?>
  1. <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】

  1. <?php
  2. $dsn = "mysql:host=localhost;dbname=thinkshop";
  3. $user= "root";
  4. $pwd = "";
  5. try{
  6. $pdo = new PDO($dsn,$user,$pwd);
  7. }catch(PDOException $e){
  8. echo $e -> getMessage();
  9. }
  10. $pdo -> exec("set names utf8");
  11. $sql = "select * from marks";
  12. $result = $pdo -> query($sql);
  13. $result -> setFetchMode(PDO::FETCH_ASSOC);
  14. $data = $result-> fetchAll();
  15. $xml = "<?xml version=\'1.0\' encoding=\'utf-8\'?>";
  16. $xml .= "<thinkshop>";
  17. $xml .= "<marks>";
  18. foreach($data as $key=>$vo){
  19. $xml .= "<records>";
  20. foreach($vo as $k=> $v)
  21. $xml .= "<{$k}>".$v."</$k>";
  22. $xml .= "</records>";
  23. }
  24. $xml .= "</marks>";
  25. $xml .= "</thinkshop>";
  26. // 就是将xml内容取出具体的数据信息,这种操作就是xml解析.
  27.  
  28. $simple = simplexml_load_string($xml);
  29. foreach($simple ->children() as $vo){
  30. foreach($vo ->children() as $v){
  31. echo $v -> mid."/".$v->sid."/".$v->cid."/".$v->mark;
  32. echo "<hr/>";
  33. }
  34. }

 

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

  【marks2.php】

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

 

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

   【marks3.php】

  1. <?php
  2. $dsn = "mysql:host=localhost;dbname=thinkshop";
  3. $user= "root";
  4. $pwd = "";
  5. try{
  6. $pdo = new PDO($dsn,$user,$pwd);
  7. }catch(PDOException $e){
  8. echo $e -> getMessage();
  9. }
  10. $pdo -> exec("set names utf8");
  11. $sql = "select * from marks";
  12. $result = $pdo -> query($sql);
  13. $result -> setFetchMode(PDO::FETCH_ASSOC);
  14. $data = $result-> fetchAll();
  15. $dom = new DomDocument("1.0","utf-8");
  16. $root = $dom -> createElement("thinkshop");
  17. $dom -> appendChild($root);
  18. $marks = $dom -> createElement("marks");
  19. $root -> appendChild($marks);
  20. foreach($data as $key=>$vo){
  21. $records = $dom -> createElement("records");
  22. $marks->appendChild($records);
  23. foreach($vo as $k=>$v){
  24. $nodes = $dom -> createElement($k);
  25. $nodes -> setAttribute("name","s");
  26. $records -> appendChild($nodes);
  27. $nodes_text = $dom -> createTextNode($v);
  28. $nodes -> appendChild($nodes_text);
  29. }
  30. }
  31. // 就是将xml内容取出具体的数据信息,这种操作就是xml解析.
  32.  
  33. $simple = simplexml_import_dom($dom);
  34. foreach($simple ->children() as $vo){
  35. foreach($vo ->children() as $v){
  36. echo $v -> mid."/".$v->sid."/".$v->cid."/".$v->mark;
  37. echo "<hr/>";
  38. }
  39. }
  40. ?>

 

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】

  1. <?php
  2. $file = "domxml.xml";
  3. $dom = new DomDocument();
  4. $dom -> load($file);
  5. $root = $dom -> documentElement;
  6. foreach($root->childNodes as $vo){
  7. foreach($vo->childNodes as $v){
  8. foreach($v->childNodes as $v1){
  9. if($v1 -> nodeType ==1){
  10. echo $v1 -> nodeValue;
  11. }
  12. echo "<hr/>";
  13. }
  14. }
  15. }
  16. // 层级太多,使用xpath
  17. $objs = $dom -> getElementsByTagName("records");
  18. foreach($objs as $vo){
  19. foreach($vo -> childNodes as $v){
  20. if($v -> nodeType ==1){
  21. echo $v -> nodeValue;
  22. }
  23. }
  24. }
  25. ?>

 

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节点对象

 

版权声明:本文为shuo-128原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shuo-128/p/6921913.html