Esempio n. 1
0
        /// <summary>
        /// HTMLを解析し、ノードのリストを生成する
        /// </summary>
        /// <returns></returns>
        public HtmlNodeList Parse()
        {
            HtmlNodeList nodeList = new HtmlNodeList();

            bool isScript = false;

            //HTMLを終端まで移動していく
            while (!MoveNext())
            {
                //タグの開始の場合
                if (Current == '<')
                {
                    if (IsComment)
                    {
                        MoveToCommentEnd();
                    }
                    else
                    {
                        HtmlNode node = ParseTag();

                        if (node != null)
                        {
                            //Console.WriteLine("<{0}>", node.NodeType == NodeType.EndTag ? "/" +  node.TagName : node.TagName);

                            //foreach (String key in node.Attributes.Keys)
                            //{
                            //    Console.WriteLine("属性:{0}={1}", key, node.Attributes[key]);
                            //}

                            nodeList.Add(node);

                            if (node.NodeType == NodeType.Tag && node.TagName.Equals("script", StringComparison.OrdinalIgnoreCase))
                            {
                                isScript = true;
                            }
                            else if (node.NodeType == NodeType.EndTag && node.TagName.Equals("script", StringComparison.OrdinalIgnoreCase))
                            {
                                isScript = false;
                            }
                        }
                    }
                }
                //それ以外の場合
                else
                {
                    HtmlNode node = ParseText(isScript);

                    if (node != null)
                    {
                        //Console.WriteLine((node as HtmlTextNode).Text);
                        nodeList.Add(node);
                    }
                }
            }

            return nodeList;
        }
Esempio n. 2
0
        /// <summary>
        /// 指定されたタグ名のコレクションを返す
        /// </summary>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public HtmlNodeList GetNodesByTagName(String tagName)
        {
            HtmlNodeList nodeList = new HtmlNodeList();

            foreach (HtmlNode node in _allNodes)
            {
                if ((node.NodeType == NodeType.SelfComplete || node.NodeType == NodeType.Tag)
                    && node.TagName.Equals(tagName, StringComparison.OrdinalIgnoreCase))
                {
                    nodeList.Add(node);
                }
            }

            return nodeList;
        }
Esempio n. 3
0
        /// <summary>
        /// 指定されたテキストを含む直近の親のタグのコレクションを返す
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public HtmlNodeList GetNodesByText(String text)
        {
            HtmlNodeList nodeList = new HtmlNodeList();

            foreach (HtmlNode node in _allNodes)
            {
                if (node.NodeType == NodeType.Tag)
                {
                    if (node.InnerText.Contains(text))
                    {
                        nodeList.Add(node);
                    }
                }
            }

            return nodeList;
        }
Esempio n. 4
0
        /// <summary>
        /// 属性の値に指定された文字を含むタグのコレクションを返す
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public HtmlNodeList GetNodesByAttribute(String text)
        {
            HtmlNodeList nodeList = new HtmlNodeList();

            foreach (HtmlNode node in _allNodes)
            {
                if (node.NodeType == NodeType.Tag || node.NodeType == NodeType.SelfComplete)
                {
                    foreach (String value in node.Attributes.Values)
                    {
                        if (value != null && value.Contains(text))
                        {
                            nodeList.Add(node);
                            break;
                        }
                    }
                }
            }

            return nodeList;

        }