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();
    	}
    }
    
  • 相关阅读:
    姐姐的vue(1)
    LeetCode 64. Minimum Path Sum 20170515
    LeetCode 56. 56. Merge Intervals 20170508
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 24. Swap Nodes in Pairs 20170424
    LeetCode 19. Remove Nth Node From End of List 20170417
    LeetCode No.9 Palindrome Number 20170410
    LeetCode No.8. String to Integer (atoi) 2017/4/10(补上一周)
    LeetCode No.7 Reverse Integer 2017/3/27
    LeetCode No.4 Median of Two Sorted Arrays 20170319
  • 原文地址:https://www.cnblogs.com/liwuming/p/4494231.html
Copyright © 2011-2022 走看看