public TextElements GetElementsHasAttributes(string name, bool depthscan = false, int limit = 0) { var elements = new TextElements(); var lower = name.ToLower(); for (int i = 0; i < this.subElements.Count; i++) { var elem = this.subElements[i]; if (elem.ElemAttr.Count > 0 && lower == "*") { elements.Add(elem); } else { if (elem.ElemAttr.HasAttribute(lower)) { elements.Add(elem); } } if (depthscan && elem.SubElementsCount > 0) { elements.AddRange(elem.GetElementsHasAttributes(name, depthscan)); } } return(elements); }
public TextElements FindByXPath(string xpath) { var elements = new TextElements(); var xpathItem = XPathItem.ParseNew(xpath); elements = this.FindByXPathByBlockContainer(xpathItem.XPathBlockList); elements.SortItems(); return(elements); }
public TextElements GetElementsByPath(List <XPathBlock> block) { TextElements elements = new TextElements(); for (int i = 0; i < this.SubElementsCount; i++) { var subelem = this.SubElements[i]; if (subelem.ElementType != TextElementType.ElementNode) { continue; } for (int j = 0; j < block.Count; j++) { var curblock = block[j]; if (curblock.IsAttributeSelector) { if (curblock.BlockName == "*") { if (subelem.ElemAttr.Count == 0) { continue; } } else { if (!subelem.ElemAttr.HasAttribute(curblock.BlockName)) { continue; } } } else { if (curblock.BlockName != "*" && curblock.BlockName != subelem.ElemName) { continue; } } if (elements.Contains(subelem) || (curblock.XPathExpressions.Count == 0 || XPathActions.XExpressionSuccess(subelem, curblock.XPathExpressions))) { elements.Add(subelem); XPathActions.Eliminate(elements, curblock); } break; } } return(elements); }
private TextElements GetNotClosedPrevTagUntil(TextElement tag, string name) { var array = new TextElements(); var stag = this.GetNotClosedPrevTag(tag); while (stag != null) { if (stag.ElemName == name) { array.Add(stag); break; } array.Add(stag); stag = this.GetNotClosedPrevTag(stag); } return(array); }
public TextElements FindByXPathBlockList(XPathBlocks blocks, TextElements senderlist = null) { var elements = senderlist; for (int i = 0; i < blocks.Count; i++) { var xblock = blocks[i]; if (i == 0 && senderlist == null) { elements = FindByXPath(xblock); } else { elements = elements.FindByXPath(xblock); } } return(elements); }
public TextElements FindByXPath(XPathBlock xblock) { TextElements elements = new TextElements(); for (int j = 0; j < this.Count; j++) { var elem = this[j]; var nextelems = elem.FindByXPath(xblock); for (int k = 0; k < nextelems.Count; k++) { if (elements.Contains(nextelems[k])) { continue; } elements.Add(nextelems[k]); } } return(elements); }
public TextElements FindByXPath(XPathBlock block) { TextElements foundedElems = new TextElements(); if (block.IsAttributeSelector) { foundedElems = this.GetElementsHasAttributes(block.BlockName, block.BlockType == XPathBlockType.XPathBlockScanAllElem); } else { if (!string.IsNullOrEmpty(block.BlockName)) { if (block.BlockName == ".") { foundedElems.Add(this); return(foundedElems); } else if (block.BlockName == "..") { foundedElems.Add(this.Parent); return(foundedElems); } else { foundedElems = this.GetElementsByTagName(block.BlockName, block.BlockType == XPathBlockType.XPathBlockScanAllElem); } } } if (block.XPathExpressions.Count > 0 && foundedElems.Count > 0) { for (int i = 0; i < block.XPathExpressions.Count; i++) { var exp = block.XPathExpressions[i]; foundedElems = XPathActions.Eliminate(foundedElems, exp); if (foundedElems.Count == 0) { break; } } } return(foundedElems); }
public TextElements FindByXPathPar(XPathPar xpar, TextElements senderitems = null) { var elements = new TextElements(); elements = this.FindByXPathByBlockContainer(xpar.XPathBlockList, senderitems); if (xpar.XPathExpressions.Count > 0 && elements.Count > 0) { elements.SortItems(); for (int j = 0; j < xpar.XPathExpressions.Count; j++) { var exp = xpar.XPathExpressions[j]; elements = XPathActions.Eliminate(elements, exp); if (elements.Count == 0) { break; } } } return(elements); }
private TextElements FindByXPathByBlockContainer(XPathBlockContainer container, TextElements senderitems = null) { var elements = new TextElements(); bool inor = true; for (int i = 0; i < container.Count; i++) { var curblocks = container[i]; if (curblocks.IsOr()) { inor = true; continue; } if (!inor) { if (curblocks.IsBlocks()) { elements = this.FindByXPathBlockList(curblocks as XPathBlocks, elements); } else { elements.AddRange(this.FindByXPathPar(curblocks as XPathPar, senderitems)); } } else { if (curblocks.IsBlocks()) { elements.AddRange(this.FindByXPathBlockList(curblocks as XPathBlocks)); } else { elements.AddRange(this.FindByXPathPar(curblocks as XPathPar)); } } inor = false; } return(elements); }
public TextElements GetElementsByTagName(string name, bool depthscan = false, int limit = 0) { var elements = new TextElements(); var lower = name.ToLower(); for (int i = 0; i < this.subElements.Count; i++) { var elem = this.subElements[i]; if (elem.ElemName.ToLower() == lower || lower == "*") { elements.Add(elem); if (limit > 0 && elements.Count >= limit) { break; } } if (depthscan && elem.SubElementsCount > 0) { elements.AddRange(elem.GetElementsByTagName(name, depthscan)); } } return(elements); }
public TextElements FindByXPathOld(string xpath) { var elements = new TextElements(); XPathFunctions fn = new XPathFunctions(); var xpathblock = XPathItem.Parse(xpath); XPathActions actions = new XPathActions(); actions.XPathFunctions = new XPathFunctions(); for (int i = 0; i < xpathblock.XPathBlocks.Count; i++) { var xblock = xpathblock.XPathBlocks[i]; if (i == 0) { elements = FindByXPath(xblock); } else { TextElements newelements = new TextElements(); for (int j = 0; j < elements.Count; j++) { var elem = elements[j]; var nextelems = elem.FindByXPath(xblock); for (int k = 0; k < nextelems.Count; k++) { if (newelements.Contains(nextelems[k])) { continue; } newelements.Add(nextelems[k]); } } elements = newelements; } } return(elements); }