Fala galera, bom dia!
Estou com uma certa dúvida quanto à leitura de XML, o que acontece é o seguinte, eu tenho um arquivo com o seguinte conteúdo:
< agenda> PRECISO IMPRIMIR ESSE
<contato id="0"> **DEPOIS ESSE**
<nome id="3">Matheus</nome>
<numero id="4">995575991</numero> **E POR ULTIMO ESSE**
</contato>
<contato id="2">
<nome>Flavia</nome>
<numero>inexistente</numero>
</contato>
< agenda>
O que eu preciso é que quando o usuário me passar o ID 4, eu imprima o root, que no caso é agenda. imprima também o child dele que no caso é o contato de ID 0 e também imprima o número que é o próprio ID 4.
Isso é possível de se realizar?
É totalmente possível mas é necessário que você explique como está gerando o xml para podermos te ajudar.
É um arquivo que eu escrevi manualmente, se encontra no meu desktop. Não sei se é exatamente isso que você quer saber, mas foi o que entendi.
Boa tarde amigo.
Desculpe a demora em responder, mas antes tarde do que nunca…kkkkkkkkkk…criei dois métodos que fazem exatamente o que vc citou, se ainda precisar de disto…aqui está:
{
public void xmltest() {
String path = "C:\\Users\\villagram\\Desktop\\mgenteluci.xml";
File file = new File(path);
System.out.println(xmlStrip(file));
}
public String xmlStrip(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
Iterator<String> iterator = reader.lines().iterator();
String lines = "";
String resultado = "";
while (iterator.hasNext()) {
lines += iterator.next();
}
if (lines.contains("<numero id=\"4\">")) {
resultado += "<agenda>\n";
resultado += findStringXML("<contato id=\"\\d+\">", lines) + "\n";
resultado += findStringXML("<numero id=\"4\">\\d+</numero>", lines) + "\n";
resultado += "</contado>\n";
resultado += "</agenda>";
}
return resultado;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String findStringXML(String pattern, String lines) {
Pattern p1 = Pattern.compile(pattern);
Matcher m1 = p1.matcher(lines);
String resultado = "";
if (m1.find()) {
resultado = m1.group();
}
return resultado;
}
}