Pessoal, eu não estou conseguindo construir um metódo para excluir um nó do meu xml.
O Arquivo possui a seguinte estrutura:
santa maria rs ok 2008/01/29 8:56 ria OK 04/02/2008 11:28 pfb Danificada 04/02/2008 11:28possuo a classe abaixo
import java.io.;
import java.util.;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.util.Random;
import org.w3c.dom.DOMException;
/**
*
-
@author Fogliato
*/
public class manipulaarquivo2 {/** Creates a new instance of manipulaarquivo2 */
public String geraid() {
StringBuffer sb = new StringBuffer();
Random rand = new Random();
for (int i = 0; i < 16; i++) {
sb.append(Integer.toString(Math.abs(rand.nextInt()) % 16, 16));
}
return “”+sb.toString();
}public void insere(String pedido, String localizacao, String status, String datahora){
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
Document doc = null;;try { docBuilder = docFactory.newDocumentBuilder(); doc = docBuilder.parse("/home/arquivos/TFG/projeto/PDA/encomendas.xml"); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Node encomendas = doc.getFirstChild(); Node encomenda = doc.createElement("encomenda"); Attr id = doc.createAttribute("id"); id.setValue("" + pedido); NamedNodeMap encomendaAttributes = encomenda.getAttributes(); encomendaAttributes.setNamedItem(id); Node local = doc.createElement("local"); local.setTextContent(localizacao); Node estado = doc.createElement("estado"); estado.setTextContent(status); Node momento = doc.createElement("momento"); momento.setTextContent(datahora); encomenda.appendChild(local); encomenda.appendChild(estado); encomenda.appendChild(momento); encomendas.appendChild(encomenda); Transformer transformer = null; try { transformer = TransformerFactory.newInstance().newTransformer(); } catch (TransformerConfigurationException e1) { e1.printStackTrace(); } catch (TransformerFactoryConfigurationError e1) { e1.printStackTrace(); } transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //initialize StreamResult with File object to save to file StreamResult result = null; try { result = new StreamResult(new FileWriter(new File("/home/arquivos/TFG/projeto/PDA/encomendas.xml"))); } catch (IOException e1) { e1.printStackTrace(); } DOMSource source = new DOMSource(doc); try { transformer.transform(source, result); } catch (TransformerException e) { e.printStackTrace(); }
}
// MÉTODO PARA EXCLUIR
public boolean excluir(String id){
boolean resultado = false;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
Document doc = null;;
try {
docBuilder = docFactory.newDocumentBuilder();
doc = docBuilder.parse("/home/arquivos/TFG/projeto/PDA/encomendas.xml");
}
catch (ParserConfigurationException e) { e.printStackTrace(); }
catch (SAXException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
Node encomenda = doc.getElementById(id);
try {
doc.removeChild(encomenda);
resultado = true;
}
catch (DOMException e) { e.printStackTrace(); }
return resultado;
}
}
Por eu não entender realmente como realmente o JAVA funciona com XML não sei o que devo fazer para que o meu método excluir funcione. Peço que os feras do java desse portal para que por favor me ajudem pois eu preciso disso para o meu trabalho final de graduação.
Pode ser de qualquer forma desde que eu passe um id e o metodo exclua o filho que possua aquele id, pode ser utilizando o jdom ou qualquer outra classe.
Para pesquisar eu possuo o seguinte métofo:
Este método carrega uma matriz chamada arquivo, onde nessa matriz eu carrego para para a memória contendo os registros do xml e efetuo pesquisa posteriormente.
public void pesquisar(){
File f = new File("/home/arquivos/TFG/projeto/PDA/encomendas.xml");
//Criamos uma classe SAXBuilder que vai processar o XML4
SAXBuilder sb = new SAXBuilder();
//Este documento agora possui toda a estrutura do arquivo.
try {
Document d = sb.build(f);
//Recuperamos o elemento root
Element encomendas = d.getRootElement();
//Recuperamos os elementos filhos (children)
List elements = encomendas.getChildren();
Iterator i = elements.iterator();
//setTitle(""+elements.size());
//Iteramos com os elementos filhos, e filhos do dos filhos
while (i.hasNext()) {
Element element = (Element) i.next();
arquivo[cont][0] = ""+element.getAttributeValue("id");
arquivo[cont][1] = ""+element.getChildText("estado");
arquivo[cont][2] = ""+element.getChildText("local");
arquivo[cont][3] = ""+element.getChildText("momento");
cont ++;
}
}
catch (JDOMException e) { e.printStackTrace(); }
//catch (JDOMParseException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
os imports necessários para que este método funcione são
import java.io.File;
import java.io.IOException;
//import java.lang.reflect.Array;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
Pessoal, se irmos a fundo neste caso podemos construir uma classe ossuindo metodos bem definido, para inserir, editar, excluir e pesquisar em um xml. Procurei por vários sites e nenhum tinha uma explicação objetiva de como efetuar a exclusão de um filho ou alteração de um nó em um caso semelhante a este meu. Se alguém souber e postar as devidas explicações aqui, agradeço desde já. Obrigado!