Exemple #1
0
 private void check4SelfClosing()
 {
     if (SelfClosing = (HtmlOuter.Right(1) == "/"))
     {
         return;
     }
     SelfClosing = (selfClosingTags.SingleOrDefault(s => s == TagName) != null);
 }
Exemple #2
0
        /// <summary>
        /// Will set HtmlOuter & HtmlInner
        /// </summary>
        /// <param name="_ptr"></param>
        private void findTag(int _ptr)
        {
            initFindTag();
            //
            // Get Outer Html
            //

            // Find next Tag & point to <Tag
            if ((_ptr = findLtOpen(_ptr)) == -1)
            {
                ReturnCode = 1;
                Message    = "findTag: tag not found";
                return;
            }

            int ptrNextChar = getNextChar(_ptr);

            if (Html.Substring(_ptr, 1) == "/")              // Error:  Looking for Start Tag, Found End Tag
            {
                throw new Exception("/");
            }
            ptrOuter = _ptr;                 // we are pointing to <Tag
            TagName  = getNextWord(_ptr + 1);

            regex = new Regex(@"<(.*?)>");
            match = regex.Match(Html.Substring(_ptr));
            if (!match.Success)
            {
                ReturnCode = 1;
                Message    = "findTag: tag not found - Regex";
                return;
            }
            HtmlOuter = match.Value.InnerContents().Trim();
            if (HtmlOuter.IndexOf("<") != -1)
            {
                throw new Exception("Invalid Outer Html -" + HtmlOuter);
            }

            ptrInner = Html.Substring(ptrOuter).IndexOf(">") + 1 + ptrOuter;
            // todo Put Outer Html attributes in a collection
            check4SelfClosing();
            if (SelfClosing)
            {
                ptrCurrent = ptrInner;
                return;
            }
            //
            // Get Inner Html
            //

            _ptr = ptrInner;

            int nestLevel = 1;
            int ptrEndTag;
            int ptrStartTag;

            while (nestLevel > 0)
            {
                if ((ptrEndTag = Html.IndexOf("</" + TagName, _ptr)) == -1)
                {
                    throw new Exception("findTag - End tag not found - Tag: " + TagName);
                }

                ptrOuterEndTag = ptrEndTag;

                if ((ptrStartTag = Html.IndexOf("<" + TagName, _ptr)) == -1)
                {
                    ptrStartTag = Int32.MaxValue;
                }

                if (ptrEndTag < ptrStartTag)
                {
                    nestLevel--;
                    _ptr = ptrEndTag + 1;
                }
                else
                {
                    nestLevel++;
                    _ptr = ptrStartTag + 1;
                }
            }

            // ptrOuterEndTag points to start of Outer End Tag - </tag>

            HtmlInner = Html.Substring(ptrInner, ptrOuterEndTag - ptrInner);

            ptrOuterNext = ptrOuterEndTag + TagName.Length + 3;               // </td>
            if (ptrOuterNext >= Html.Length)
            {
                ptrOuterNext = -1;
                HtmlEnd      = true;
            }
            ptrCurrent = ptrOuterNext;
            FoundTag   = true;
        }
Exemple #3
0
        public string GetAttribute(string AttributeName)
        {
            int    ptr;
            int    ptrValueStart;
            string delim;

            AttributeName = AttributeName.Trim();
            // Call SetOuterHtml
            // ptr = InStr(2, HtmlOuter, AttributeName, Constants.vbTextCompare);
            ptr = HtmlOuter.IndexOf(AttributeName, 1, StringComparison.OrdinalIgnoreCase);
            if (ptr == -1)
            {
                return(""); // AttributeName does not exist
            }

            // attr="value"
            // attr = "value"
            // attr=value
            // Find equal sign
            ptr = ptr + AttributeName.Length; // sb pointing to = unless extraneous spaces
            // attr=value
            // ptr ^
            while (Mid(HtmlOuter, ptr, 1) != "=")
            {
                ptr = ptr + 1; // bypass spaces
                if (ptr > HtmlOuter.Length)
                {
                    Message    = "1 - Equal sign not found for Attribute " + AttributeName;
                    ReturnCode = -1;
                    return(null);
                }
            }
            ptr = ptr + 1; // bypass equal
                           // Get Attr value delimiter
            while (Mid(HtmlOuter, ptr, 1) == " ")
            {
                ptr = ptr + 1; // bypass spaces
                if (ptr > HtmlOuter.Length)
                {
                    Message    = "2 - Equal sign not found for Attribute " + AttributeName;
                    ReturnCode = -1;
                    return(null);
                }
            }

            // Now pointing to attr delimeter - ie ' or " or none
            delim = Mid(HtmlOuter, ptr, 1);
            if (delim == "'" | delim == "\"")
            {
                ptr = ptr + 1; // point to 1st attr val char
            }
            else
            {
                delim = " ";// un-quoted value
            }
            ptrValueStart = ptr;
            while (ptr <= HtmlOuter.Length)
            {
                if (Mid(HtmlOuter, ptr, 1) == delim)
                {
                    // GetAttribute = Mid(HtmlOuter, ptrValueStart, ptr - ptrValueStart);
                    return(Mid(HtmlOuter, ptrValueStart, ptr - ptrValueStart));
                }
                ptr = ptr + 1;
            }
            return(Mid(HtmlOuter, ptrValueStart, ptr - ptrValueStart));
        }