/// <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; }