XHTML.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:2k
源码类别:

搜索引擎

开发平台:

C#

  1. using System;
  2. namespace HTMParse
  3. {
  4. public class ParseHTML:Parse 
  5. {
  6. public AttributeList GetTag()
  7. {
  8. AttributeList tag = new AttributeList();
  9. tag.Name = m_tag;
  10. foreach(Attribute x in List)
  11. {
  12. tag.Add((Attribute)x.Clone());
  13. }
  14. return tag;
  15. }
  16. public String BuildTag()
  17. {
  18. String buffer="<";
  19. buffer+=m_tag;
  20. int i=0;
  21. while ( this[i]!=null ) 
  22. {// has attributes
  23. buffer+=" ";
  24. if ( this[i].Value == null ) 
  25. {
  26. if ( this[i].Delim!=0 )
  27. buffer+=this[i].Delim;
  28. buffer+=this[i].Name;
  29. if ( this[i].Delim!=0 )
  30. buffer+=this[i].Delim;
  31. else 
  32. {
  33. buffer+=this[i].Name;
  34. if ( this[i].Value!=null ) 
  35. {
  36. buffer+="=";
  37. if ( this[i].Delim!=0 )
  38. buffer+=this[i].Delim;
  39. buffer+=this[i].Value;
  40. if ( this[i].Delim!=0 )
  41. buffer+=this[i].Delim;
  42. }
  43. }
  44. i++;
  45. }
  46. buffer+=">";
  47. return buffer;
  48. }
  49. protected void ParseTag()
  50. {
  51. m_tag="";
  52. Clear();
  53. // Is it a comment?
  54. if ( (GetCurrentChar()=='!') &&
  55. (GetCurrentChar(1)=='-')&&
  56. (GetCurrentChar(2)=='-') ) 
  57. {
  58. while ( !Eof() ) 
  59. {
  60. if ( (GetCurrentChar()=='-') &&
  61. (GetCurrentChar(1)=='-')&&
  62. (GetCurrentChar(2)=='>') )
  63. break;
  64. if ( GetCurrentChar()!='r' )
  65. m_tag+=GetCurrentChar();
  66. Advance();
  67. }
  68. m_tag+="--";
  69. Advance();
  70. Advance();
  71. Advance();
  72. ParseDelim = (char)0;
  73. return;
  74. }
  75. // Find the tag name
  76. while ( !Eof() ) 
  77. {
  78. if ( IsWhiteSpace(GetCurrentChar()) || (GetCurrentChar()=='>') )
  79. break;
  80. m_tag+=GetCurrentChar();
  81. Advance();
  82. }
  83. EatWhiteSpace();
  84.             int XXX = 0;
  85. // Get the attributes
  86. while (( GetCurrentChar()!='>' ) &&(XXX<900000))
  87. {
  88.                 XXX = XXX + 1;
  89. ParseName = "";
  90. ParseValue = "";
  91. ParseDelim = (char)0;
  92. ParseAttributeName();
  93. if ( GetCurrentChar()=='>' ) 
  94. {
  95. AddAttribute();
  96. break;
  97. }
  98. // Get the value(if any)
  99. ParseAttributeValue();
  100. AddAttribute();
  101. }
  102. Advance();
  103. }
  104. public char Parse()
  105. {
  106. if( GetCurrentChar()=='<' ) 
  107. {
  108. Advance();
  109. char ch=char.ToUpper(GetCurrentChar());
  110. if ( (ch>='A') && (ch<='Z') || (ch=='!') || (ch=='/') ) 
  111. {
  112. ParseTag();
  113. return (char)0;
  114. else return(AdvanceCurrentChar());
  115. else return(AdvanceCurrentChar());
  116. }
  117. }
  118. }