Por cierto, he probado a abrir el doc de la siguiente manera en lugar de crearlo pero me ha dado el error "HIERARCHY_REQUEST_ERR: Se ha realizado un intento de insertar un nodo donde no está permitido. ":
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("C:\\config.xml"));
Guenas.
No podría jurarlo, pero creo que te falta un nodo raíz del cual colgar todos los nodoFather que vas creando
Si no me equivoco un XML debe tener un único nodo raíz del cual colgar el resto del arbol.
Un saludo
Muchas gracias, lo probaré mañana mismo y ya comentaré si funciona o no.
Lo he probado y no me funcionaba pero finalmente he puesto el doc.appendChild(nodoFather); en el evento disconect y me ha funcionado bien.
Gracias a todos.
Buenas, estoy insertando datos en un XML con DOM pero cuando quiero agregar un nuevo dato no sé cómo se hace ya que lo que hago es crear un nuevo fichero, meter datos y luego sobreescribirlo.
Quería saber si alguien me puede ayudar a abrirlo y escribir a continuación ya que he buscado por internet y no soy capaz de encontrar la manera.
Gracias de antemano.
package interno.datos;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
public class XML implements IDatos{
private Document doc;
private StringWriter sw;
private Element nodoFather;
public void insert(String[] cad, String table){
for (int i = 0; i < cad.length; i++) {
Element nodo = doc.createElement(table);
Text texto = doc.createTextNode(cad[i]);
nodo.appendChild(texto);
nodoFather.appendChild(nodo);
}//Agrego los datos a los nodos para insertarlos en el XML.
doc.appendChild(nodoFather);
}
public void insert(String[][] cad, String table){
for (String[] strings : cad) { insert(strings, table); }
}
/*
* A continuación se lleva a cabo la lectura/escritura de datos del XML.
*/
public void Conect(){
try{
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
nodoFather = doc.createElement("Valija");
}catch(ParserConfigurationException ex){System.out.println("1"); }
}//Creo el XML.
public void Disconect(){
try {
TransformerFactory transFact = TransformerFactory.newInstance();
transFact.setAttribute("indent-number", new Integer(3));
Transformer trans = transFact.newTransformer();
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
sw = new StringWriter();
StreamResult sr = new StreamResult(sw);
DOMSource domSource = new DOMSource(nodoFather);
trans.transform(domSource, sr);
PrintWriter writer = new PrintWriter(new FileWriter("C:\\config.xml"));
writer.println(sw.toString());
writer.close();
} catch (IllegalArgumentException | TransformerException | IOException e) {
}
}//Guardo el XML.
}