已经搞定了,使用一个stack实现

解决方案 »

  1.   


    请优化,下列代码供参考:private void parseField(JsoupParser parser, String target) throws Exception {
    if (StringUtils.isEmpty(target)) {
    return;
    }
    List<Field> fields = processor.getPageRule(target).getFields();

    Stack<List<Field>> fieldStack = new Stack<List<Field>>();
    Stack<String> targetStack = new Stack<String>();
    Stack<List<String>> valueStack = new Stack<List<String>>();
    Stack<JsoupParser> parserStack = new Stack<JsoupParser>();

    fieldStack.push(fields);
    parserStack.push(parser);

    while (!fieldStack.isEmpty()) {
    fields = fieldStack.pop();
    for (Field field : fields) {
    List<String> values = getValues(parser, field.getFieldValue());

    System.out.println(field.getFieldName() + "\t" + values);

    if (StringUtils.isNotEmpty(field.getTarget())) {
    valueStack.push(values);
    targetStack.push(target);
    target = field.getTarget();
    }
    }

    while (!valueStack.isEmpty()) {
    List<String> values = valueStack.pop();
    for (String url : values) {
    parser = new JsoupParser(url, userAgent);
    fields = processor.getPageRule(target).getFields();

    parserStack.push(parser);
    fieldStack.push(fields);
    }
    }
    parser = parserStack.pop();
    }
    }