Header.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // HtmlAgilityPack V1.0 - Simon Mourier <[email protected]>
  2. using System;
  3. using System.Collections;
  4. namespace HtmlAgilityPack
  5. {
  6. internal class NameValuePair
  7. {
  8. internal readonly string Name;
  9. internal string Value;
  10. internal NameValuePair()
  11. {
  12. }
  13. internal NameValuePair(string name):
  14. this()
  15. {
  16. Name = name;
  17. }
  18. internal NameValuePair(string name, string value):
  19. this(name)
  20. {
  21. Value = value;
  22. }
  23. }
  24. internal class NameValuePairList
  25. {
  26. internal readonly string Text;
  27. private ArrayList _allPairs;
  28. private Hashtable _pairsWithName;
  29. internal NameValuePairList():
  30. this(null)
  31. {
  32. }
  33. internal NameValuePairList(string text)
  34. {
  35. Text = text;
  36. _allPairs = new ArrayList();
  37. _pairsWithName = new Hashtable();
  38. Parse(text);
  39. }
  40. internal string GetNameValuePairValue(string name)
  41. {
  42. if (name==null)
  43. throw new ArgumentNullException();
  44. ArrayList al = GetNameValuePairs(name);
  45. if (al==null)
  46. return null;
  47. // return first item
  48. NameValuePair nvp = al[0] as NameValuePair;
  49. return nvp.Value;
  50. }
  51. internal ArrayList GetNameValuePairs(string name)
  52. {
  53. if (name==null)
  54. return _allPairs;
  55. return _pairsWithName[name] as ArrayList;
  56. }
  57. private void Parse(string text)
  58. {
  59. _allPairs.Clear();
  60. _pairsWithName.Clear();
  61. if (text==null)
  62. return;
  63. string[] p = text.Split(';');
  64. if (p==null)
  65. return;
  66. foreach(string pv in p)
  67. {
  68. if (pv.Length==0)
  69. continue;
  70. string[] onep = pv.Split(new char[]{'='}, 2);
  71. if (onep==null)
  72. continue;
  73. NameValuePair nvp = new NameValuePair(onep[0].Trim().ToLower());
  74. if (onep.Length<2)
  75. nvp.Value = "";
  76. else
  77. nvp.Value = onep[1];
  78. _allPairs.Add(nvp);
  79. // index by name
  80. ArrayList al = _pairsWithName[nvp.Name] as ArrayList;
  81. if (al==null)
  82. {
  83. al = new ArrayList();
  84. _pairsWithName[nvp.Name] = al;
  85. }
  86. al.Add(nvp);
  87. }
  88. }
  89. internal static string GetNameValuePairsValue(string text, string name)
  90. {
  91. NameValuePairList l = new NameValuePairList(text);
  92. return l.GetNameValuePairValue(name);
  93. }
  94. }
  95. }