/// <summary>
 /// 属性名を設定する。
 /// 設定する値が null の場合は該当の属性は『削除』する
 /// </summary>
 /// <param name="attributeName"></param>
 /// <param name="attributeValue"></param>
 public void SetAttributes(string attributeName, string attributeValue)
 {
     string keyAttributeName = attributeName.ToLower();
     if (_attrList == null)
     {
         ParseAttribute();
     }
     if (attributeValue == null)
     {
         // 削除項目の検索
         List<AttributeItem> delItemList = new List<AttributeItem>();
         foreach (var attr in _attrList)
         {
             if (string.Equals(attr.Name, keyAttributeName,StringComparison.OrdinalIgnoreCase))
             {
                 delItemList.Add(attr);
             }
         }
         // 削除の実施
         foreach (AttributeItem delItem in delItemList)
         {
             _attrList.Remove(delItem);
         }
         _attribute.Remove(keyAttributeName);
     }
     else
     {
         AttributeItem item = _attrList.FirstOrDefault(at => at.Name == keyAttributeName);
         if (item == null)
         {
             // 新規追加
             if (_attrList.Count > 0)
             {
                 AttributeItem spaceItem = new NullAttributeItem(" ");
                 _attrList.Add(spaceItem);
             }
             item = new AttributeItem();
             item.Name = keyAttributeName;
             _attrList.Add(item);
         }
         item.Value = attributeValue;
     }
 }
        /// <summary>
        /// HTML タグを解析して 属性を抽出する。
        /// </summary>
        /// <param name="htmlTagString"></param>
        /// <returns></returns>
        public List<AttributeItem> ParseHtmlTag(string htmlTagString)
        {
            List<AttributeItem> ans = new List<AttributeItem>();
            // <img src=test.gif > を解析して <img {space} , attr:src=gif , {space} > に分解する。
            // <div> は <div > に分解する
            using (StringReader sr = new StringReader(htmlTagString))
            {
                AttributeTokenizer t = new AttributeTokenizer(sr);

                while (t.Read())
                {
                    ans.Add(t.Current);
                }
                // Tokenの先頭と 末尾は NullAttributeItem に変換する。
                if (ans.Count >= 2)
                {
                    AttributeItem top = ans.First();
                    AttributeItem last = ans.Last();

                    AttributeItem nullTop = new NullAttributeItem(top.RawString);
                    AttributeItem nullLast = new NullAttributeItem(last.RawString);

                    ans.Remove(top);
                    ans.Remove(last);
                    ans.Insert(0, nullTop);
                    ans.Add(nullLast);
                }
            }
            return ans;
        }