XML基础知识

8-10 102 views

1、XML是什么?

  • XML:可扩展标记语言(Extensible Markup Language)

 

2、它有什么用?

  • 被设计用来传输和存储数据;
  • 自行定义标签,具有自我描述性;
  • 语法严格,错误无法运行;
  • 规定小写

 

3、语法规范

组成

  • 声明部分(声明XML的版本与编码):<?xml version = '1.0' encoding = 'utf-8'?>
  • 节点部分(节点/标签/元素):<节点名></节点名>、<节点名 />

标签

  • 必须成对出现或自闭合,自定义全小写,可嵌套,但不支持相互嵌套;
  • 属性必有值,推荐小写,必用引号把值引起来

注释:<!--我是注释-->

特殊字符:用实体代替,例如:' -> &apos、" -> &quot、> -> &gt、< ->&lt等

CDATA节点(放置大量文本,不解析其内容):<![CDATA[dew24fsdf]]>

 

4、创建、解析XML

1)DOM:文档对象模型——Document Object Model

解析XML

  1. 创建文档对象:$dom = new DOMDocument('1.0','utf-8');
  2. 加载XML文档到内存:$dom->load(路径);
  3. 寻找节点并输出,例如:
  4. echo $dom->getElementsByTayName(节点名)->item(节点位置)->nodeValue

创建XML

  1. 创建文档对象:$dom = new DOMDocument('1.0','utf-8');
  2. 创建文本节点:$t = $dom->createTextNode('测试');
  3. 创建普通节点:$E = $dom->createElement('test');
  4. 将文本节点放进普通节点:$E->appendChild($t);
  5. 创建属性节点:$a = $dom->createAttribute('id');$a->value='test';
  6. 将属性节点放进文档:$E->appendChild($a);
  7. 将普通节点放进文档:$dom->appendChild($E);
  8. 输出:header('Content-type:text/xml');echo $dom->savexml();
  9. 或保存:$dom->save(路径);

2)SimleXml扩展(推荐使用)

  • 提供了一个非常简单且易于使用的工具集
  • 能将XML转换成一个带有一般属性选择器和数组迭代器的对象

将XML格式转换成数组(利用递归)

  • $simple = simplexml_load_file(文件路径);——用于将XML文件转换成对象
  • $simple = simplexml_load_string(xml字符串);——用于将XML格式的字符串转换成对象
  • 也可利用json_encode($obj)、json_decode($json,true)
  • function xmlToArr($sim){
  • $sim = (array)$sim;
  • foreach($sim as $k => $v){
  •          if($v instanceof simplexmlelement || is_array($v)){
  •                    $sim[$k] = xmlToArr($v);
  •          }
  • }
  • return $sim;
  • }
  • var_dump(xmlToArr($simple));

将数组转为XML格式字符串

  • function arrToXml($arr,$node = 'null'){
  •       if($node === 'null')
  •             $simxml = new simpliXMLElement('<?xml version = '1.0' encoding='utf-8'?><root></root>');
  •        else
  •              $simxml = $node;
  •        foreach($arr as $k=>$v){
  •             if(is_array($v))
  •                   arrToXml($v,$simxml->addChild($k));
  •             else if(is_numeric($k))
  •                    $simxml->addChild('item',$v);
  •             else
  •                    $simxml->addChild($k,$v);
  •         }
  • return $simxml->savexml(路径);
  • }

3)XPath:XML路径语言,可用其快速查询XML

  • $dom->new DOMDocument('1.0','utf-8');
  • $dom->load('路径');
  • $xpath = new DOMXPATH($dom);
  • $path = "/dict/word[name='".$word."']/name";
  • //dict目录下的word的目录下的name节点值为$word的节点列表
  • $word = $xpath->query($path);
  • $word->item(0)->nodeValue;//获取节点值

 

欢迎留言