JSoup: получить элемент, который не содержит определенного атрибута

У меня есть таблица, содержащая следующую логику.

  1. В таблице отображается список имен
  2. Для каждой строки, содержащей <tr class=hiderow><td class=packagename>...</td></tr> -> эта строка не будет видна.

Таким образом, таблица может содержать 100 строк, но если 20 строк содержат class=hiderow, то пользователь может видеть только 80 строк на странице. Я хочу получить имя этих 80 строк (не 100). Поэтому мне нужно разобрать данные, которые не содержат class=hiderow. Я знаю, как получить каждое имя, используя jsoup, я также вижу, что в документации есть :not(selector) elements that do not match the selector., но я не уверен, как его использовать. Пожалуйста помоги.

EDIT Я выяснил, как это сделать. Пожалуйста, дайте мне знать, если есть лучший способ.
EDIT2 Пожалуйста, используйте приведенное ниже решение от BalusC. Это намного чище.

public void obtainPackageName(String urlLink) throws IOException{
    List<String> pdfList = new ArrayList<String>();
    URL url = new URL(urlLink);
    Document doc = Jsoup.parse(url, 3000);
    Element table = doc.select("table[id=mastertableid]").first();
    Iterator<Element> rowIter = table.select("tr").iterator();
    while(rowIter.hasNext()){
        Element row = rowIter.next();
        if(!row.className().contains("hiderow")){
            Element packageName = row.select("td[class=packagename]").first();
            if(packageName != null){
                pdfList.add(packageName.text());
            }

        }
    }
}

person Thang Pham    schedule 26.10.2011    source источник


Ответы (1)


Вам нужно применить :not() к интересующему элементу (в вашем случае это tr), а затем передать ему селектор CSS, относящийся к элементу, которому элемент должен не совпадать (это .hiderow в вашем случае). кейс).

Итак, это должно сделать:

Document document = Jsoup.connect(urlLink).get();
Elements packagenames = document.select("#mastertableid tr:not(.hiderow) td.packagename");
List<String> pdfList = new ArrayList<String>();

for (Element packagename : packagenames) {
    pdfList.add(packagename.text()); 
}
person BalusC    schedule 26.10.2011
comment
это выглядит намного чище, я попробую это. TY BalusC - person Thang Pham; 27.10.2011