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(); 
   } 
  }
    }

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