php操作xml,xml 常用

一、解常见协议:
 FTP(File Transfer Protocol):远程文件传输协议,允许用户将远程主机上的文件拷贝到自己的计算机上。
 SMTP(Simple Mail transfer Protocol):简单邮政传输协议,用于传输电子邮件。 
 NFS(Network File Server):网络文件服务器,可使多台计算机透明地访问彼此的目录。 
 HTTP 超文本传输协议:
  HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年 的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中
 HTTP协议的主要特点可概括如下: 
1.支持客户/服务器模式。 
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。 
由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 


二、了解xml:
    当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴。有史以来第一次,这个世界拥有了一种用来结构化文档和数据的通用且适应性强的格式,它不仅仅可以用于 WEB,而且可以被用于任何地方。


XML 指扩展标记语言。
HTML指的是超文本标记语言。
php 指的是超文本预处理语言。




xml是提供不同平台不同语言之间的通信桥梁.


xml 本质是文本文件.用来描述数据的结构




xml的基本语法:
xml有严格的语法规则
xml必须先申明
  <?xml version="1.0" encoding="utf-8" ?>
xml必须创建根元素
xml中所有的元素必须成对出现
xml对大小写敏感
xml元素嵌套必须正确
xml元素的属性必须使用 "" 包含


XML文档使用的是自描述的和简单的语法,一个XML文档最基本的构成包括:声明,处理指令(可选)和元素。以下是一个简单的
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
<!-- 网页xml 注释说明 -->
<boot>
   <title>我的网页</title>
   <author>lyle_zhang</author>
   <content>这是内容@!神奇的2013! 祝同学们找到自己理想的工作!</content>
</boot>


解释:
  文档的声明
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
xml标记说明它是一个xml文档,后面两个属性值表明了它的版本号和编码标准,standalone取yes表明该文件未引用其他外部XML文件。


三、与xml 相关的webservice.
xml Web Service 是在 Internet 上进行分布式计算的基本构造块。开放的标准以及对用户和应用程序之间的通信和协作的关注产生了这样一种环境,在这种环境下,XML Web Service 成为应用程序集成的平台。
xML Web Service 可以非常详细地说明其接口,这使用户能够创建客户端应用程序与它们进行通信。


xML Web Service 通过标准的 Web 协议向 Web 用户提供有用的功能。多数情况下使用 SOAP 协议。 
soap 是 XML Web Service 的通信协议。


四、xml html xhtml dhtml 的区别:


XML与HTML的设计区别是:
   XML是用来存储数据的,重在数据本身。
  HTML是用来定义数据的,重在数据的显示模式
  XHTML(The Extensible HyperText Markup Language(可扩展标识语言))实际上是HTML的升级版本。这一版本推出的目的是为了让人们更加容易接受XML,因为XML是未来web发展的方向,本质上说,XHTML是一个过渡技术,结合了部分XML的强大功能及大多数HTML的简单特性。
DHTML:确切地说,DHTML只是一种制作网页的概念,实际上没有一个组织或机构推出过所谓的DHTML标准或技术规范之类的。DHTML不是一种技术、标准或规范,DHTML只是一种将目前已有的网页技术、语言标准整和运用,制作出能在下载后仍然能实时变换页面元素效果的网页的设计概念。 DHTML建立在原有技术的基础上,可分为三个方面:


一是HTML,也就是页面中的各种页面元素对象,它们是被动态操纵的内容;


二是CSS,CSS属性也是动态操纵的内容,从而获得动态的格式效果;


三是客户端脚本(例如JavaScript),它实际操纵Web页上的HTML和CSS。


使用DHTML技术,可使网页设计者创建出能够与用户交互并包含动态内容的页面。实际上,DHTML使网页设计者可以动态操纵网页上的所有元素——甚至是在这些页面被装载以后。利用DHTML,网页设计者可以动态地隐藏或显示内容、修改样式定义、激活元素以及为元素定位。DHTML还可使网页设计者在网页上显示外部信息,方法是将元素捆绑到外部数据源(如文件和数据库)上。所有这些功能均可用浏览器完成而无需请求Web服务器,同时也无需重新装载网页。这是因为一切功能都包含在HTML文件中,随着对网页的请求而一次性下载到浏览器端.


五、dom 操作xml




<?xml  version="1.0" encoding="utf-8" ?>
<boot>
   <stu  name="stu1" id="stu1" for="aa">aa</stu>
   <stu  name="stu1" id="stu1" for="aa">bb</stu>
   <stu  name="stu1" id="stu1" for="aa">cc</stu>
</boot>


dom节点读取数据


<?php
header("content-type: text/html; charset=utf-8");
  //dom 节点读取xml文件
$dom = new DomDocument(); //创建 DOM对象
$dom->load('1.xml'); //读取 XML文件
$root = $dom->documentElement; //获取 XML数据的根
$nodes=$root->childNodes; //获取XML 根对象下面的所有子节点对象


echo $nodes->item(1)->nodeValue;  //输出姓名
echo $nodes->item(3)->nodeValue;  //输出密码
echo $nodes->item(5)->nodeValue;  //输出性别
echo $nodes->item(7)->nodeValue;  //输出年龄


//获取属性
echo $dom->getElementsByTagName('name')->item(0)->attributes->getNamedItem('abc')->nodeValue;
echo $nodes->item(1)->attributes->getNamedItem('id')->nodeValue;




readXml($root); //执行循环读取节点函数,传递根节点对象
function readXml($nodes){
     if($nodes->hasChildNodes()){  //判断是否有子节点
           $childNodes=$nodes->childNodes; //获取到所有的字节点列表
            foreach($childNodes as $key=>$node){ //循环子节点列表
                  if($node->nodeType == XML_ELEMENT_NODE){ //判断是否是一个节点对象
                      readXml($node);//递归执行readXml() 函数
                  }elseif($node->nodeType== XML_TEXT_NODE){ //判断是否是一个文件节点
                       echo $node->nodeValue; //如果这里有业务逻辑在这里写你的代码
                  }
            }
     }
}


?>


 //dom 生成xml 文档
<?php
 $doc=new DOMDocument('1.0');
//依次创建并追加节点对象
 $root=$doc->appendChild($doc->createElement('school')); //创建并追加根目录
//创建子节点
  $class1=$root->appendChild($doc->createElement('class1'));
//创建班级下面的子节点
  $stu=$class1->appendChild($doc->createElement('stu'));
//给stu 创建属性与文本
  $stu->appendChild($doc->createTextNode('1班'));
 $stu->setAttribute('number','10');
 $stu->setAttribute('zhuanye','java');
/**
 * 上面的代码生成xml格式
<school>
<class1>
<stu number="10" zhuanye="java">1&#x73ED;</stu>
</class1>
</school>
 */
//创建子节点
$class2=$root->appendChild($doc->createElement('class2'));
//创建班级下面的子节点
$stu2=$class2->appendChild($doc->createElement('stu'));
//给stu 创建属性与文本
$stu2->appendChild($doc->createTextNode('1班'));
$stu2->setAttribute('number','20');
$stu2->setAttribute('zhuanye','php');
//生成
$doc->formatOutput=true;
 $xmlDoc=$doc->saveXML(); //生成xml 返回一个xml文档
 $doc->save('school.xml');


/**
 上面的代码最终生成的结果:
 <?xml version="1.0"?>
<school>
<class1>
<stu number="10" zhuanye="java">1&#x73ED;</stu>
</class1>
<class2>
<stu number="20" zhuanye="php">1&#x73ED;</stu>
</class2>
</school>
 */


六、simplexml接口
header("content-type: text/html; charset=utf-8");
$xml=simplexml_load_file('school.xml');//返回数组对象
//循环读取数据和属性
 foreach($xml as $key=>$node){
       if($key=='class1'){
           echo  $node->stu;//直接访问对象的文本节点  //输出的结果: 1班
       }elseif($key== 'class2'){
             echo $node->stu['number']; //属性的访问 输出结果: 20
       }
  }


 //直接访问属性
 echo $xml->class1->stu['zhuanye'];  //输出结果: java
/**
<?xml version="1.0"?>
<school>
<class1>
<stu number="10" zhuanye="java">1&#x73ED;</stu>
</class1>
<class2>
<stu number="20" zhuanye="php">2&#x73ED;</stu>
</class2>
</school>
 */




远程获取xml 并保存
<?php
 header("content-type: text/html; charset=utf-8");
//远程访问xml文件
$xml=simplexml_load_file('http://127.0.0.1/xml/2.xml');
$xml->asXML('5.xml'); //保存在本地
//依据你的业务逻辑操作你的xml文档
?>




七、
数据库数据生成xml 文档


/**
<?xml version="1.0"?>
<users>
  <users.0>
     <id>1</id>
     <name>aa</name>
     <pwd>bb</pwd>
     <email>cc</email>
  </users.0>
</users>
**/












$conn=mysql_connect('127.0.0.1','root','test123');
mysql_select_db('member');
mysql_set_charset("utf8");
//数据提交
if(isset($_POST['zhuce'])){
    $username=trim($_POST['username']);
    $userpwd=trim($_POST['userpwd']);
    $useremail=trim($_POST['useremail']);


    //写入数据库
    $sql="insert into reg(`id`,`name`,`pwd`,`email`) values(null,'$username','$userpwd','$useremail')";
    $res= mysql_query($sql);
    if($res){


        //查询数据库
        $sql="select * from reg";
        $rest=mysql_query($sql);
        $users=array();
        while($rows=mysql_fetch_assoc($rest)){
            $users[]=$rows;
        }
    }
  //判断是否有数据
  if( ! empty($users)){
    $xmlString=createXml('users',$users);
    $xmlObj=new SimpleXMLElement($xmlString); //生成xml对象
    $xmlObj->asXML("reg.xml"); //保存
  }
}


//创建xml
 function createXml($boot,$data){
     $xml="<$boot>\n";
        foreach($data as $key=>$value){
            if(is_string($key)){
                  $xml.="<$key>";
                    foreach($value as $k=>$val){
                       $xml.="\n<$k>".$val."</$k>";
                    }
                  $xml.="\n</$key>\n";
            }else{
              $xml.="<$boot.$key>";
                foreach($value as $k=>$val){
                    $xml.="\n<$k>".$val."</$k>";
                }
               $xml.="\n</$boot.$key>\n";
            }
        }
     $xml.="</$boot>";
      return $xml;
 }
 






?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">


<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="Administrator" />


<title>注册后将数据写入数据库并将数据生成xml 文档 保存在 api 目录下面</title>
</head>


<body>
   <form action="#" method="post" name="reg">
       用户名:<input type="text" name="username" /><br />
       密码:<input type="password" name="userpwd" /><br />
       邮箱:<input type="text" name="useremail" /><br />
       <input type="submit" value="注册" name="zhuce" />
   
   </form>
</body>
</html>


远程获取对象:
  
$xml=simplexml_load_file('http://127.0.0.1/xml/reg.xml');
//$memberXml=$xml->asXML('member.xml');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">


<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="author" content="Administrator" />


    <title>注册后将数据写入数据库并将数据生成xml 文档 保存在 api 目录下面</title>
</head>


<body>
<table>
<tr><th>id</th><th>name</th><th>pwd</th><th>email</th></tr>
<?php
  foreach($xml as $key=>$node){
 ?>
      <tr>
          <td><?php echo $node->id;?></td>
          <td><?php echo $node->name;?></td>
          <td><?php echo $node->pwd;?></td>
          <td><?php echo $node->email;?></td>
      </tr>
 <?php
}
?>
</table>
</body>
</html>






yahoo 查询中国城市id地址
http://weather.yahoo.com/china/




 $xml=simplexml_load_file("http://xml.weather.yahoo.com/forecastrss?w=2158433&u=c");
 echo '<pre>';
    //var_dump($xml);
   $arrobj=$xml->channel->image;
   //echo $arrobj->url;
 // print_r($xml->channel);
 echo '</pre>';
 
 echo '<img src="'.$arrobj->url.'">';
 
 echo '<a href="'.$arrobj->link.'">'.$arrobj->title.'</a>';






sian weather天气预报xml
 header("content-type: text/html;charset=utf-8");
$content=file_get_contents("http://php.weather.sina.com.cn/xml.php?password=DJOYnieT8234jlsK&day=0&city=成都");
 file_put_contents('sina_weather.xml',$content);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值