XML迭代解析算法

 public void LoadXMLToTree(XmlNode xmlNode,Context context)
 {
  if (xmlNode.IsNull())
   return;//判断节点是否为空(递归终止的条件) 
  else
  {
   XmlNodeList ChildNodeList = xmlNode.GetChildren(); //取得当前节点的孩子节点集合
   int Count = ChildNodeList.GetCount();//获得孩子节点的数量
   for(int i=0; i<Count; i++) //对每个子节点递归遍历
   {
    xmlNode = ChildNodeList.GetItem(i);
    startElement(context); //每一个节点调用一次读取函数
    LoadXMLToTree(xmlNode,context);
   }
  }
 }

 

public void startElement(Context context)  {
  InputStream fIn = null;   //读文件流
  String result = null; //result 内容存放
  try{ 
   fIn = context.openFileInput("test.txt"); //读取文件
   int length= fIn.available();//获取文件的字节数
   byte [] buffer = new byte[length]; //创建byte数组
   fIn.read(buffer);  //将文件中的数据读取到byte数组中
   result = new String(buffer); //类型转换 byte[]->String
   
   //遍历后条件判断
   boolean IsNameStart=false;
   boolean IsValueStart=false;
   boolean IsValueNameStart=false;
   String value = null;
   String nodename = null;
   String valuename = null;
   String NodeValue = null;
   
   for(int i=0;i<buffer.length;i++) //单个byte字节   
   {
    char tmp = (char)buffer[i]; //byte->char
    if(tmp=='<')
    {
     IsNameStart=true;
    }
    else if(IsNameStart)
    {
     if(tmp=='>')
     {
      IsNameStart=false; 
      IsValueStart=true;
     }
     else
     {
      nodename = nodename + tmp;
     }
    }
    
    if(IsValueStart) 
    {
     //子节点处理
     value=value+tmp;
     XmlNode xmlNode = new XmlNode(value);
     LoadXMLToTree(xmlNode,context);
     
  
     if(tmp == "</")   {  //字节的增量每次加2
      IsValueNameStart=true;
     }
     else if(IsValueNameStart) {
      if(tmp == '>') {
       IsValueNameStart = false;
      }
      else
      {
       valuename = valuename + tmp;
       if(valuename == nodename )
       {
        NodeValue = value;
        IsValueStart = false;
       }
      }
     }
    }
   }
  } 
  catch (Exception e) {  
   e.printStackTrace(); 
  } 
  finally 
  { 
   try { 
    fIn.close(); 
  } catch (IOException e) { 
    e.printStackTrace(); 
   } 
  }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章