2012-08-15 2 views
0

저는 Jsoup을 처음 사용하고 있으며 id가없는 모든 요소를 ​​찾기 위해 html 파일을 파싱하려고합니다. 지금까지이 코드 스 니펫 만 있습니다 :Jsoup : id가없는 요소를 html로 찾으십시오.

  Document doc = Jsoup.parse(input, null); 
     for (Element el : doc.getAllElements()) { 
      hasId = el.hasAttr("id"); 
      if (!hasId) { 
       idList.add(el.tagName()); 
      } else { 
       log.info("id:" + el.attr("id")); 
      } 
     } 

id가있는 요소가 올바르게 발견되었습니다. 내 문제는 ID가있는 경우에만 시작 요소를 검색하는 것입니다. Jsoup와 함께 처리 할 수 ​​있습니까?

답변

2

질문을 올바르게 이해하고 있는지 확실하지 않지만 id 속성이없는 모든 요소 만 선택하려고한다고 생각합니다. 그렇다면,이 작업을해야합니다 :

doc.select("*:not([id])") 

가 jsoup 웹 사이트에 full list of selectors있다.

업데이트 :이 쿼리를 변경 table tbody tr td

주의 사항 : 나에게이 출력을 제공합니다 내 컴퓨터에서 위의 실행

import org.jsoup.Jsoup; 
import org.jsoup.nodes.*; 

public class Soup { 
    public static void main(String[] args) { 
    String data = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td class=\"reportheader\" align=\"left\" nowrap width=\"720\">Outside my Dreams</td> </tr> </table>"; 
    Document doc = Jsoup.parse(data); 
    StringBuilder tags = new StringBuilder(); 
    for (Element el : doc.select("body *:not([id])")) { 
     tags.append(el.tagName()); 
     tags.append(' '); 
    } 
    System.out.println(tags); 
    } 
} 

:

다음은 전체 예제 약간 : "body *:not([id])". 앞에 body을 추가하면 data 문자열에 부분 문서를 파싱 할 때 Jsoup가 자동으로 추가하는 <html><title></title><body> ... </body></html>이 제외됩니다.

+0

답장을 보내 주시길 바랍니다. 이 코드가 있다고 가정 해 보겠습니다.

내 꿈 바깥 쪽
[/ code]이고 검색에서 모든 종료 태그 (예 :,, goya

+0

나는 너를 단지 이해하지 못하고 있는지, 아니면 정말로 혼란 스러울 지 모르겠다. 끝 태그는 결과에 '요소'로 포함되지 않습니다. '.toString()'의 결과물에서 끝 태그를 볼 수 있으므로 네스트를 명확하게 볼 수 있습니다. 끝 태그는 실제로 요소가 아니며 단지 요소의 끝을 나타냅니다. 위에서 추가 한 예제의 결과물을 통해이를 명확하게 볼 수 있습니다. – DaoWen

+0

네 번만 네 도움! 나는 선택기 구문을 이해하기 시작했다. 다음 일 동안 더 익숙해 지려고 노력할 것입니다. – goya

관련 문제