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