使用PHP5.0轻松解析XML文档(2)

发表于:2007-06-21来源:作者:点击数: 标签:
文件:SimpleDocumentNode. php <?php /** *========================================================= * * @author hahawen(大龄青年) * @since 2004-12-04 * @copyright Copyright (c) 2004, NxCoder Group * *========================================

   
  文件:SimpleDocumentNode.php
  
  <?php
  /**
   *=========================================================
   *
   * @author   hahawen(大龄青年)
   * @since   2004-12-04

   * @copyright Copyright (c) 2004, NxCoder Group
   *
   *=========================================================
   */
  /**
   * class SimpleDocumentNode
   * xml Node class, include values/attributes/subnodes.
   * all this pachage's is work for xml file, and method is action as DOM.
   *
   * @package SmartWeb.common.xml
   * @version 1.0
   */
  class SimpleDocumentNode extends SimpleDocumentBase
  {
   private $seq = null;
   private $rootObject = null;
    private $pNodeId = null;
    function __construct($rootObject, $pNodeId, $nodeTag, $seq)
    {
     parent::__construct($nodeTag);
      $this->rootObject = $rootObject;
      $this->pNodeId = $pNodeId;
      $this->seq = $seq;
    }
    public function getPNodeObject()
    {
     return ($this->pNodeId==-1)? $this->rootObject: $this->rootObject->getNodeById($this->pNodeId);
    }
    public function getSeq(){
     return $this->seq;
    }
    public function createNode($name, $attributes)
    {
      return $this->createNodeByName($this->rootObject, $name, $attributes, $this->getSeq());
    }
    public function removeNode($name)
    {
      return $this->removeNodeByName($this->rootObject, $name);
    }
    public function getNode($name=null)
    {
      return $this->getNodeByName($this->rootObject, $name);
    }
  }
  ?>
  
  下面是例子运行对结果:
  
    下面是通过函数getSaveData()返回的整个xml数据的数组
  
  Array
  (
    [name] => 华联
    [address] => 北京长安街-9999号
    [desc] => 连锁超市
    [cat_food] => Array
      (
        [attrs] => Array
          (
            [id] => food
          )
        [goods_food11] => Array
          (
            [name] => food11
            [price] => 12.90
            [attrs] => Array
              (
                [id] => food11
              )
          )
        [goods_food12] => Array
          (
            [name] => food12
            [price] => 22.10
            [desc] => Array
              (
                [value] => 好东西推荐
                [attrs] => Array
                  (
                    [creator] => hahawen
                  )
              )
            [attrs] => Array
              (
                [id] => food12
              )
          )
      )
    [cat_1] => Array
      (
        [goods_tel21] => Array
          (
            [name] => tel21
            [price] => 1290
            [attrs] => Array
              (
                [id] => tel21
              )
          )
      )
    [cat_coat] => Array
      (
        [attrs] => Array
          (
            [id] => coat
          )
        [goods_coat31] => Array
          (
            [name] => coat31
            [price] => 112
            [attrs] => Array
              (
                [id] => coat31
              )
          )
        [goods_coat32] => Array
          (
            [name] => coat32
            [price] => 45
            [attrs] => Array
              (
                [id] => coat32
              )
          )
      )
    [special_hot] => Array
      (
        [attrs] => Array
          (
            [id] => hot
          )
        [goods_0] => Array
          (
            [name] => hot41
            [price] => 99
          )
      )
  )
  
  下面是通过setValue()函数,给给根节点添加信息,添加后显示出结果xml文件的内容
  
  <?xml version="1.0" encoding="GB2312" ?>
  <shop>
   <name>华联</name>
   <address>北京长安街-9999号</address>
   <desc>连锁超市</desc>
   <telphone>123456789</telphone>
   <cat id="food">
   <goods id="food11">
    <name>food11</name>
    <price>12.90</price>
   </goods>
   <goods id="food12">
    <name>food12</name>
    <price>22.10</price>
    <desc creator="hahawen">好东西推荐</desc>
   </goods>
   </cat>
   <cat>
   <goods id="tel21">
    <name>tel21</name>
    <price>1290</price>
   </goods>
   </cat>
   <cat id="coat">
   <goods id="coat31">
    <name>coat31</name>
    <price>112</price>
   </goods>
   <goods id="coat32">
    <name>coat32</name>
    <price>45</price>
   </goods>
   </cat>
   <special id="hot">
   <goods>
    <name>hot41</name>
    <price>99</price>
   </goods>
   </special>
  </shop>
  
  下面是通过getNode()函数,返回某一个分类下的所有商品的信息商品名:
  
  food11Array
  (
    [name] => food11
    [price] => 12.90
  )
  Array
  (
    [id] => food11
  )
  商品名:food12Array
  (
    [name] => food12
    [price] => 22.10
    [desc] => Array
      (
        [value] => 好东西推荐
        [attrs] => Array
          (
            [creator] => hahawen
          )
      )
  )
  Array
  (
    [id] => food12
  )
  
  
    下面是通过findNodeByPath()函数,返回某一商品的信息商品名:
  food11Array
  (
    [name] => food11
    [price] => 12.90
  )
  Array
  (
    [id] => food11
  )
  
  下面是通过setValue()函数,给商品"food11"添加属性, 然后显示添加后的结果
  
  <?xml version="1.0" encoding="GB2312" ?>
  <shop>
   <name>华联</name>
   <address>北京长安街-9999号</address>
   <desc>连锁超市</desc>
   <telphone>123456789</telphone>
   <cat id="food">
   <goods id="food11">
    <name>food11</name>
    <price>12.90</price>
    <leaveword author="hahawen" date="2004-12-05">这个商品不错</leaveword>
   </goods>
   <goods id="food12">
    <name>food12</name>
    <price>22.10</price>
    <desc creator="hahawen">好东西推荐</desc>
   </goods>
   </cat>
   <cat>
   <goods id="tel21">
    <name>tel21</name>
    <price>1290</price>

原文转自:http://www.ltesting.net