Opa,
Preciso ler uma página HTML e atribuir valores presentes em determinadas tags a variáveis.
De forma simplificada, tenho de popular uma base de dados utilizando algumas informações contidas no código-fonte dessas páginas.
Já consegui realizar esse procedimento quando, por exemplo, o valor esta entre duas tags:
<div clas="abc">
// valores
</div>
O problema é quando tenho de ler valores do tipo:
<div clas="abc">
<select name="id1">
//<options>
</select>
<select name="id2">
//<options>
</select>
</div>
<div clas="abc">
<select name="id1">
//<options>
</select>
<select name="id2">
//<options>
</select>
</div>
Preciso de todo o conteúdo, porém, como estou passando os valores iniciais e finais, só estou conseguindo verificar o conteúdo da primeira div.
Estou utilizando as classes Pattern e Matcher do pacote java.util.regex.
Se alguém já passou por algo similar ou conhece alguma lib que possua funcionalidade parecida, ficaria agradecido.
Realizei pesquisa no Google e sei que existem diversas bibliotecas, mas não consegui obter resultados em situações assim.
Pra que quiser dar um auxilio, segue fonte:
public String getContent(String url, String start, String end) {
String line = null;
String content = "";
URL address = null;
InputStreamReader inputReader = null;
BufferedReader buffReader = null;
try {
address = new URL(url);
inputReader = new InputStreamReader(address.openStream());
buffReader = new BufferedReader(inputReader);
while ((line = buffReader.readLine()) != null)
content += line;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
close(inputReader, buffReader);
}
Pattern pattern = Pattern.compile(start + ".*?" + end);
Matcher matcher = pattern.matcher(content);
if (!matcher.find())
return null;
content = matcher.group(0);
content = content.replace(start, "");
content = content.trim();
content = content.replace(end, "");
return content;
}