ParseHTML.cs
上传用户:yxdanqu
上传日期:2010-01-07
资源大小:84k
文件大小:3k
源码类别:

搜索引擎

开发平台:

C#

  1. using System;
  2. namespace Spider
  3. {
  4. /// <summary>
  5. /// Summary description for ParseHTML.
  6. /// 
  7. /// This spider is copyright 2003 by Jeff Heaton. However, it is
  8. /// released under a Limited GNU Public License (LGPL). You may 
  9. /// use it freely in your own programs. For the latest version visit
  10. /// http://www.jeffheaton.com.
  11. ///
  12. /// </summary>
  13. public class ParseHTML:Parse 
  14. { public AttributeList GetTag() { AttributeList tag = new AttributeList(); tag.Name = m_tag; foreach(Attribute x in List) { tag.Add((Attribute)x.Clone()); } return tag; } public String BuildTag() { String buffer="<"; buffer+=m_tag; int i=0; while ( this[i]!=null ) 
  15. {// has attributes buffer+=" "; if ( this[i].Value == null ) 
  16. { if ( this[i].Delim!=0 ) buffer+=this[i].Delim; buffer+=this[i].Name; if ( this[i].Delim!=0 ) buffer+=this[i].Delim; } 
  17. else 
  18. { buffer+=this[i].Name; if ( this[i].Value!=null ) 
  19. { buffer+="="; if ( this[i].Delim!=0 ) buffer+=this[i].Delim; buffer+=this[i].Value; if ( this[i].Delim!=0 ) buffer+=this[i].Delim; } } i++; } buffer+=">"; return buffer; } protected void ParseTag() { m_tag=""; Clear(); // Is it a comment? if ( (GetCurrentChar()=='!') && (GetCurrentChar(1)=='-')&& (GetCurrentChar(2)=='-') ) 
  20. { while ( !Eof() ) 
  21. { if ( (GetCurrentChar()=='-') && (GetCurrentChar(1)=='-')&& (GetCurrentChar(2)=='>') ) break; if ( GetCurrentChar()!='r' ) m_tag+=GetCurrentChar(); Advance(); } m_tag+="--"; Advance(); Advance(); Advance(); ParseDelim = (char)0; return; } // Find the tag name while ( !Eof() ) 
  22. { if ( IsWhiteSpace(GetCurrentChar()) || (GetCurrentChar()=='>') ) break; m_tag+=GetCurrentChar(); Advance(); } EatWhiteSpace(); // Get the attributes while ( GetCurrentChar()!='>' ) 
  23. { ParseName = ""; ParseValue = ""; ParseDelim = (char)0; ParseAttributeName(); if ( GetCurrentChar()=='>' ) 
  24. { AddAttribute(); break; } // Get the value(if any) ParseAttributeValue(); AddAttribute(); } Advance(); } public char Parse() { if( GetCurrentChar()=='<' ) 
  25. { Advance(); char ch=char.ToUpper(GetCurrentChar()); if ( (ch>='A') && (ch<='Z') || (ch=='!') || (ch=='/') ) 
  26. { ParseTag(); return (char)0; } 
  27. else return(AdvanceCurrentChar()); } 
  28. else return(AdvanceCurrentChar()); }
  29. }
  30. }