Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Insertar al final de XML

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.
}

noviembre 15, 2013 | Registered CommenterElena

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"));

noviembre 15, 2013 | Registered CommenterElena

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

noviembre 15, 2013 | Unregistered CommenterPaposo

Muchas gracias, lo probaré mañana mismo y ya comentaré si funciona o no.

noviembre 16, 2013 | Registered CommenterElena

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.

noviembre 17, 2013 | Registered CommenterElena