public List<string> GetUsersFromTb(Winista.Text.HtmlParser.Util.NodeList nlist) { List<string> us = new List<string>(); if (nlist == null || nlist.Count == 0) return us; Winista.Text.HtmlParser.INode tablenode = null; for (int i = 0; i < nlist[0].Children.Count; i++) { var tg = nlist[0].Children[i] as Winista.Text.HtmlParser.ITag; if (tg == null || tg.TagName != "TABLE") continue; tablenode = nlist[0].Children[i]; break; } if (tablenode == null) return us; Winista.Text.HtmlParser.Util.NodeList trs = null; for (int i = 0; i < tablenode.Children.Count; i++) { var tg = tablenode.Children[i] as Winista.Text.HtmlParser.ITag; if (tg == null) continue; if (tg.TagName == "TBODY") { trs = tg.Children; break; } if (tg.TagName == "TR") { trs = tablenode.Children; break; } } if (trs == null || trs.Count == 0) return us; for (int i = 0; i < trs.Count; i++) { var tg = trs[i] as Winista.Text.HtmlParser.ITag; if (tg == null || tg.TagName != "TR") continue; //get first td Winista.Text.HtmlParser.ITag firsttd = null; for (int k = 0; k < trs[i].Children.Count; k++) { var td_t = trs[i].Children[k] as Winista.Text.HtmlParser.ITag; if (td_t != null && td_t.TagName == "TD") { firsttd = td_t; break; } } if (firsttd == null) continue; //get div Winista.Text.HtmlParser.ITag td_div = null; for (int k = 0; k < firsttd.Children.Count; k++) { var td_t_div = firsttd.Children[k] as Winista.Text.HtmlParser.ITag; if (td_t_div != null && td_t_div.TagName == "DIV") { td_div = td_t_div; break; } } if (td_div == null) continue; //GET A Winista.Text.HtmlParser.ITag td_div_a = null; for (int k = 0; k < td_div.Children.Count; k++) { var td_t_div = td_div.Children[k] as Winista.Text.HtmlParser.ITag; if (td_t_div != null && td_t_div.TagName == "A") { td_div_a = td_t_div; break; } } if (td_div_a == null) continue; us.Add(td_div_a.ToPlainTextString().Trim()); } return us; }
/// <summary> Scan the tag. /// For this implementation, the only operation is to perform the tag's /// semantic action. /// </summary> /// <param name="tag">The tag to scan. /// </param> /// <param name="lexer">Provides html page access. /// </param> /// <param name="stack">The parse stack. May contain pending tags that enclose /// this tag. /// </param> /// <returns> The resultant tag (may be unchanged). /// </returns> public virtual ITag Scan(ITag tag, Winista.Text.HtmlParser.Lex.Lexer lexer, NodeList stack) { tag.DoSemanticAction(); return (tag); }