description
태그에 저장하는 RSS의 정보를 읽는 중입니다. HTML 코드이며 일반 텍스트가 아닙니다. 첫 번째 이미지처럼 나타나는 정보를 추출 할 필요가 있지만 description
안에있는 모든 태그는 Jsoup에 의해 구문 분석되지 않기 때문에 CDATA 요소의 동작으로 가정 할 수 없습니다.대체없이 Jsoup로 CDATA 내의 태그를 자동으로 파싱하는 방법
내 질문에 나는 "자동 방법"을 보았 기 때문에 여기에 다른 질문이 있는데 나는 .replace()
을 사용하여 CDATA를 제거했지만 특정 케이스에 도움이 될 것이라고 생각하는만큼 효과적인 솔루션이 아닌 것 같습니다. 범용 목적이 아닙니다. 그래서 제 질문은 Jsoup가 텍스트를 바꾸지 않고 파싱을 할 수있는 방법이 있다면 말입니까? 이것이 유일한 방법입니까? 다른 도서관을 사용해야합니까? 예를 들어
, 나는 RSS 문서를 구문 분석 할 때, 노드 설명이 있습니다
<table width='100%' border='0' cellspacing='0' cellpadding='4'><tr><td align='left' width='10'><
a href='http://www.3djuegos.com/noticia/145062/0/bioware-nuevo-juego-ip/video-gamescom/trailer/'><img src='http://i11c.3djuegos.com/juegos/7332/dragon_age_iii/fotos/noticias/dragon_age_iii-2583054.jpg' border='0' width='70' height='52' />
</a></td><td align='left' valign='top'>Parece ser una nueva licencia creativa, según lo visto en un enigm&aacu
모든 특수 문자를 "<>"CDATA 그렇게 작동하기 때문에 scaped된다. 문서의 나머지 부분은 으로 잘 파싱되었습니다.은 CDATA 콘텐츠에서만 발생합니다. 내가 액세스에 사용
코드 :
doc = Jsoup.connect("http://www.3djuegos.com/universo/rss/rss.php?plats=1-2-3-4-5-6-7-34&tipos=noticia-analisis-avance-video-imagenes-demo&fotos=peques&limit=20").get();
System.out.println(doc.html()); // Shows the document well parsed.
Elements nodes = doc.getElementsByTag("item"); // Access to news
for(int i = 0; i < nodes.size(); i++){ // Loop all news
// Description node
Element decriptionNode = nodes.get(i).getElementsByTag("description").get(0);
// Shows content of node. Here is where HTML tags are escaped
System.out.println(nodes.get(i).getElementsByTag("description").html()); // Here prints the content of description tag and all HTML tags are escaped by default
// Access to first image and here fails because of description text is escaped
// and then Jsoup cant parsed as nodes
Element imageNode = descriptionNode.getElementsByTag("img").get(0);
}
편집 : doc.outputSettings().escapeMode(EscapeMode.xhtml)
사용하지만 나는 그것이 CDATA 내용에 영향을 미치지 않는 것으로 가정합니다.
Edit2 : unescape html을 허용하는 라이브러리 org.apache.commons.lang3.StringEscapeUtils
의 해결 방법으로 사용하지만 Jsoup가 이미이 시나리오에 대해 뭔가를 가지고 있다면 여전히 생각하고 있습니다.
구문 분석하려는 샘플 코드와 추출 할 항목의 샘플 코드를 제공해야합니다. –
CDATA 문제로 업데이트되었습니다. – korima
그리고 당신의 Jsoup 코드는 무엇입니까? –