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