/** * select elements * * @param elementSelector elementSelector * @return result */ protected Selectable selectElements(BaseElementSelector elementSelector) { ListIterator<Element> elementIterator = getElements().listIterator(); if (!elementSelector.hasAttribute()) { List<Element> resultElements = new ArrayList<Element>(); while (elementIterator.hasNext()) { Element element = checkElementAndConvert(elementIterator); List<Element> selectElements = elementSelector.selectElements(element); resultElements.addAll(selectElements); } return new HtmlNode(resultElements); } else { // has attribute, consider as plaintext List<String> resultStrings = new ArrayList<String>(); while (elementIterator.hasNext()) { Element element = checkElementAndConvert(elementIterator); List<String> selectList = elementSelector.selectList(element); resultStrings.addAll(selectList); } return new PlainText(resultStrings); } }
@Override public Selectable selectList(Selector selector) { if (selector instanceof BaseElementSelector) { return selectElements((BaseElementSelector) selector); } return selectList(selector, getSourceTexts()); }
@Override public Selectable smartContent() { SmartContentSelector smartContentSelector = Selectors.smartContent(); return select(smartContentSelector, getSourceTexts()); }
@Override public List<Selectable> nodes() { List<Selectable> selectables = new ArrayList<Selectable>(); for (Element element : getElements()) { List<Element> childElements = new ArrayList<Element>(1); childElements.add(element); selectables.add(new HtmlNode(childElements)); } return selectables; }
@Override public Selectable $(String selector, String attrName) { CssSelector cssSelector = Selectors.$(selector, attrName); return selectElements(cssSelector); }
@Override protected List<String> getSourceTexts() { List<String> sourceTexts = new ArrayList<String>(getElements().size()); for (Element element : getElements()) { sourceTexts.add(element.toString()); } return sourceTexts; } }
@Override public Selectable select(Selector selector) { return selectList(selector); }
@Override public Selectable xpath(String xpath) { XpathSelector xpathSelector = Selectors.xpath(xpath); return selectElements(xpathSelector); }
@Override public List<Selectable> nodes() { List<Selectable> selectables = new ArrayList<Selectable>(); for (Element element : getElements()) { List<Element> childElements = new ArrayList<Element>(1); childElements.add(element); selectables.add(new HtmlNode(childElements)); } return selectables; }
@Override protected List<String> getSourceTexts() { List<String> sourceTexts = new ArrayList<String>(getElements().size()); for (Element element : getElements()) { sourceTexts.add(element.toString()); } return sourceTexts; } }
@Override public Selectable select(Selector selector) { return selectList(selector); }
@Override public Selectable selectList(Selector selector) { if (selector instanceof BaseElementSelector) { return selectElements((BaseElementSelector) selector); } return selectList(selector, getSourceTexts()); }
/** * select elements * * @param elementSelector elementSelector * @return result */ protected Selectable selectElements(BaseElementSelector elementSelector) { ListIterator<Element> elementIterator = getElements().listIterator(); if (!elementSelector.hasAttribute()) { List<Element> resultElements = new ArrayList<Element>(); while (elementIterator.hasNext()) { Element element = checkElementAndConvert(elementIterator); List<Element> selectElements = elementSelector.selectElements(element); resultElements.addAll(selectElements); } return new HtmlNode(resultElements); } else { // has attribute, consider as plaintext List<String> resultStrings = new ArrayList<String>(); while (elementIterator.hasNext()) { Element element = checkElementAndConvert(elementIterator); List<String> selectList = elementSelector.selectList(element); resultStrings.addAll(selectList); } return new PlainText(resultStrings); } }
@Override public Selectable $(String selector) { CssSelector cssSelector = Selectors.$(selector); return selectElements(cssSelector); }
@Override public Selectable smartContent() { SmartContentSelector smartContentSelector = Selectors.smartContent(); return select(smartContentSelector, getSourceTexts()); }
@Override public Selectable links() { return selectElements(new LinksSelector()); }
@Override public Selectable $(String selector) { CssSelector cssSelector = Selectors.$(selector); return selectElements(cssSelector); }
@Override public Selectable xpath(String xpath) { XpathSelector xpathSelector = Selectors.xpath(xpath); return selectElements(xpathSelector); }
@Override public Selectable $(String selector, String attrName) { CssSelector cssSelector = Selectors.$(selector, attrName); return selectElements(cssSelector); }
@Override public Selectable links() { return selectElements(new LinksSelector()); }