zoukankan      html  css  js  c++  java
  • XML操作类

    /**
     * nodename :选取所有子节点
     * /		:从根节点选取
     * //		:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
     * . 		:选取当前节点
     * ..		:选取当前节点的父节点
     * @		:选取属性
     *
     * 
     * //book 	:选取所有book子元素
     * //title[@lang='eng']		:选取所有title元素,且这些元素拥有值为eng的lang属性
     * //book[price>35.00]		:选取所有book元素,且其price元素的值需大于35.00
     */
    
    class XML{
    	private $dom;
        private $xmlfile;
    	private $xpath;
        
    	/**
         * @brief 构造函数
         * @param string $xmlfile xml文件名 如果文件名不填写[即为空],则保存时必需填写文件名。
         * @param string $encoding 文件的编码格式,默认为UTF-8编码
         */
    	public function __construct($params = array()){
    		$keys = array_keys($params);
    		if(!in_array('encoding',$keys)){
    			$params['encoding'] = "utf-8";
    		}
    		$this->dom=new DOMDocument('1.0');
    		$this->rootNode = $this->dom->appendChild($this->dom->createElement($params['rootNode']));
    		$this->dom->formatOutput=true;
    		$this->dom->encoding = $params['encoding'];
            if(in_array('xmlfile',$keys) && $params['xmlfile']!='' && strtolower(substr($params['xmlfile'],-4))=='.xml'){
    			$this->xmlfile = $params['xmlfile'];
    		}
    		$this->xpath=new DOMXpath($this->dom);
    	}
    	
        /**
         * @brief 查询节点函数
         * @param string $query xpath查询字符串
         * @return mixed 查询成功返回节点,失败返回false;
         */
    	public function query($query)
    	{
    		$element = $this->xpath->query($query);
    		if($element->length>0){
    			return $element;
    		}else{
    			return false;
    		}
    	}
    	
    	
    	
    	public function setStylesheet($value)
    	{
    		$this->dom->appendChild($this->dom->createProcessingInstruction('xml-stylesheet', 'href="'.$value.'" type="text/xsl"'));
    	}
    	/**
         * @brief 添加节点
    	 * @param string $query xpath查询字符串
    	 * @param string $name 节点名称
    	 * @param string $value 节点值
    	 * @param string $attrs 属性值,可以设置多个属性,如:name=web;age=12;class=高二
    	 * @return bool 成功返回true,失败返回false
    	 */
    	public function addNode($query, $name, $value="", $attrs=""){
    		$target_node=$this->query($query);
    		if(is_string($name)){
    			if($target_node){
    				$value = str_replace(
    					array('>','<','&'),
    					array('>','<','&'),
    					$value
    				);
    				$node=$this->dom->createElement($name,$value);
    				if($attrs!=""){
    					$tems=explode(";",$attrs);
    					if(count($tems)>0){
    						for($i=0;$i<count($tems);$i++){
    							$tem=explode("=",$tems[$i]);
    							$node->setAttribute($tem[0],$tem[1]);
    						}
    					}
    				}
    				$target_node->item(0)->appendChild($node);
    				return true;
    			}
    			else
    			{
    				return false;
    			}
    		}else{
    			$target_node->item(0)->appendChild($name);
    		}
    	}
    	/**
         * @brief 给节点添加属性
    	 * @param string $query xpath查询字符串
    	 * @param string $name 属性名称
    	 * @param string $value 属性值
    	 * @return bool 成功返回true,失败返回false
    	 */
    	public function addAttr($query, $name, $value)
    	{
    		$node=$this->query($query);
    		if($node)
    		{
                for($i=0; $i<$node->length; $i++) $node->item($i)->setAttribute($name,$value);
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	/**
         * @brief 删除节点
    	 * @param string $query xpath查询字符串
    	 * @return bool 成功返回true,失败返回false
    	 */
    	function delNode($query)
    	{
    		$node=$this->query($query);
    		if($node)
    		{
    			$node->item(0)->parentNode->removeChild($node->item(0));
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	/**
         * @brief 删除一个节点的属性
    	 * @param string $query xpath查询字符串
    	 * @param string $name 属性名称
    	 * @return bool 成功返回true,失败返回false
    	 */
    	function delAttr($query, $name)
    	{
    		$node=$this->query($query);
    		if($node)
    		{
    			$node->item(0)->removeAttribute($name);
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	/**
         * @brief 修改节点属性
    	 * @param string $query xpath查询字符串
    	 * @param string $name 属性名称
    	 * @param string $value 属性值
    	 * @return bool 成功返回true,失败返回false
    	 */
    	public function updAttr($query, $name, $value)
    	{
    		$node=$this->query($query);
    		if($node)
    		{
    			$node->item(0)->setAttribute($name,$value);
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	/**
         * @brief 修改节点的值
    	 * @param string $query xpath查询字符串
    	 * @param string $value 属性值
    	 * @return bool 成功返回true,失败返回false
    	 */
    	public function updNode($query, $value)
    	{
    		$node=$this->query($query);
    		if($node)
    		{
    			$node->item(0)->nodeValue=$value;
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	/**
         * @brief 保存XML文档
    	 * @param string $file XML文件名,不填写则默认以创建此类文件时的文件名来存储。
    	 * @return mixed 成功返回写入的字节, 失败返回false
    	 */
    	public function save1($file='')
    	{
            if($file=='' && $this->xmlfile!='')$file = $this->xmlfile;
    		$this->dom->save($file);
    	}
        /**
         * @brief 转换成XML字符串
         * @return String
         */
    	public function  save(){
    		return $this->dom->saveXML();
    	}
    }
    
  • 相关阅读:
    vim初试(Hello World)
    CSP201809-2 买菜(超简单的方法!!)
    CSP202006-2 稀疏向量
    CSP202012-2 期末预测之最佳阈值
    浮点数表示
    结构体
    全排列-康托展开及逆展开
    CA-031 上手Games101环境 Games101环境怎么配置
    计算机图形学 实验四 AET算法
    计算机图形学 实验三 梁氏裁剪算法
  • 原文地址:https://www.cnblogs.com/liwuming/p/4494231.html
Copyright © 2011-2022 走看看