Java - Cambiar valor de un parametro de archivo xml

 
Vista:

Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 20/02/2007 00:21:35
Hola!!

Me gustaria cambiar el valor de un parametro de un archivo xml con java y queria ver si alguien me puede dar una idea de como hacerlo. La estructura de las etiquetas seria la siguiente:

<init-param>
<param-name>indice</param-name>
<param-value>23</param-value>
</init-param>

Lo que quiero hacer es modificar el valor del indice, donde pone 23 poner el nuevo valor.

A ver si alguien me puede ayudar!

Muchas gracias de antemano!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cambiar valor de un parametro de archivo xml

Publicado por Angel (537 intervenciones) el 20/02/2007 09:36:12
Para este caso en particular:

Este codifo deberia estar por ejmplo, en el constructor de la clase que vaya a contener l codigo:
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");
System.setProperty("javax.xml.transform.TransformerFactory","org.apache.xalan.processor.TransformerFactoryImpl");

//En cualquier metodo........

try{
//Cargar el fichero
InputStream is = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
//Si tu xml estubiese en el paquete conf.xml
is = loader.getResourceAsStream("/conf/xml/archivo.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(is);
//Seleccionar el elemento deseado,,en este caso param-value, contando que solo hay uno y contando que tiene datos en su interior

doc.getElementsByTagName("param-value").item(0).getFirstChild().setNodeValue("nuevoValor");

//Y para gaurdarlo...
// DOM to String
StringWriter strDoc = new StringWriter();
javax.xml.transform.TransformerFactory tf =
javax.xml.transform.TransformerFactory.newInstance();

Transformer tr = tf.newTransformer();
tr.transform(new DOMSource(this.docPeticion), new StreamResult(strDoc));

String peticion = strDoc.toString();
//Para dejarlo en el mismo paquete en el que estaba
File f = new File("./src/conf/xml/archivo.xml");
FileOutputStream out = new FileOutputStream(f);
out.write(peticion.getBytes());
out.close();

}catch(Exception e)
{
e.printStackTrace();
}

Espero que te ayude, saludos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 20/02/2007 10:59:06
Muchas gracias Angel!!!

Mas o menos me has orientado algo, el problema es que tengo varios parametros en el archivo... y por cada uno hay una etiqueta <param-value>, entonces lo que querria hacer, es localizar primero el <param-name> que quiero modificar y una vez localizado, modificar su <param-value>. ¿Es posible esto?

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por Angel (537 intervenciones) el 20/02/2007 11:22:34
Por supuesto que puedes, el codigo cambiaria un poco,,seria ma o meno asi:

Para por ejemplo un fichero con estas etiketas:
<init-param>
<param-name>indice</param-name>
<param-value>23</param-value>

<param-name>indice2</param-name>
<param-value>nuevoValor</param-value>

<param-name>indice3</param-name>
<param-value>23</param-value>
</init-param>

********************* JAVA ****************************

Este codifo deberia estar por ejmplo, en el constructor de la clase que vaya a contener l codigo:
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");
System.setProperty("javax.xml.transform.TransformerFactory","org.apache.xalan.processor.TransformerFactoryImpl");

//En cualquier metodo........

try{
//Cargar el fichero
InputStream is = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
//Si tu xml estubiese en el paquete conf.xml
is = loader.getResourceAsStream("/conf/xml/archivo.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(is);

//Aki sta el cambio....recorres la lista de param-name buscando el k kiers guardas la poscion en "pos" y luego cojes el param-value en esa posicion y cambias el valor

int pos = 0;
NodeList ndl = this.docPeticion.getElementsByTagName("param-name");
for(int i=0;i<ndl.getLength();i++)
{
Node node = ndl.item(i);
if(node.getFirstChild().getNodeValue().equals("indice2"))
pos = i;
}
//Cambiar el valor en la poscion "pos" docPeticion.getElementsByTagName("param-value").item(pos).getFirstChild().setNodeValue("nuevoValor");

//Y para gaurdarlo...
// DOM to String
StringWriter strDoc = new StringWriter();
javax.xml.transform.TransformerFactory tf =
javax.xml.transform.TransformerFactory.newInstance();

Transformer tr = tf.newTransformer();
tr.transform(new DOMSource(this.docPeticion), new StreamResult(strDoc));

String peticion = strDoc.toString();
//Para dejarlo en el mismo paquete en el que estaba
File f = new File("./src/conf/xml/archivo.xml");
FileOutputStream out = new FileOutputStream(f);
out.write(peticion.getBytes());
out.close();

}catch(Exception e)
{
e.printStackTrace();
}

Espero que te ayude, saludos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 20/02/2007 16:33:25
Hola!!!

Pues he probado lo que me has dicho, lo unico que al compilar me da un fallo me pone: "cannot find symbol" en las clases Document, Node, Transformer...

Supongo que sera porque habre puesto mal lo de System.setProperty.... que ponias al principio. Te situo, yo tengo mi clase y dentro de ella tengo varios metodos entre ellos doGet y varios que he añadido yo. Pues bien, lo que he hecho simplemente, dentro de la clase, fuera de todos los metodos que tengo he puesto:

public MiServlet()
{
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");
System.setProperty("javax.xml.transform.TransformerFactory","org.apache.xalan.processor.TransformerFactoryImpl");
}

Yo no tenia constructores definidos, y este es el que he definido, posiblemente me haya colado en algo gordo...

Muchisimas gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por Angel (537 intervenciones) el 20/02/2007 16:42:07
Quizas en algo que no te he peusto, en las librerias que debes importar, que serian:

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;

Ahora mismo no recuerdo cuales son los jar que debes importar a tu proyecto para que resuelva correctamente esas sentencias import.
Aqiu t dejo un pagina que te ayuda a busacar el jar que contiene una clase determinada.

http://www.docjar.com/

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 20/02/2007 21:05:08
Hola de nuevo!

Sigo intentando hacer que funcione... He dado vueltas al codigo y bueno, el fallo de compilacion que me da ahora es en todos los docPeticion, esto es un objeto de la clase Document?? Es que supongo que sera eso y que al crearnos un objeto de la clase Document lo hemos llamado doc, no coinciden los nombres... o estoy totalmente confundida??

La verdad que me esta ayudando bastante el codigo que me has pasado. Muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por Angel (537 intervenciones) el 20/02/2007 21:31:46
No, no estas confundida,,,,donde ponga "docPeticion", es "doc", que es el elemento de tipo Document que has creado al inicio.
Perdona por el fallo..

Espero que el codigo te ayuda a salir adelante

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 22/02/2007 18:21:41
Muchas gracias!!! Tras ese cambio, y otro que me daba de compilacion... me compila perfectamente, el problema que al ejecutarlo me da una excepcion, me pone lo siguiente:

javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl could not be instantiated: java.lang.NullPointerException

javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)

Creo que tengo todos los import... alguna idea de por que me puede dar esta excepcion??

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 22/02/2007 18:24:44
Se me ocurre una cosa...

Podria ser que no he puesto el comportamiento deseado para el objeto DocumentBuilderFactory??? Es que he visto que a estos objetos se le especifican las caracteristicas de comportamiento deseadas... Tampoco se como tendria que inicializarlo, la verdad que soy novatilla en esto!

Un saludo y gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por Angel (537 intervenciones) el 22/02/2007 22:34:32
Has puesto esto en el constructor de la clase....este codigo debe ejecutarse antes de realziar cualquier accion

System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");
System.setProperty("javax.xml.transform.TransformerFactory","org.apache.xalan.processor.TransformerFactoryImpl");

Si ya tienes eso,,m pueden poner aki el codigo k t falla y m indicas n que linea t esta fallando.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 23/02/2007 09:49:27
Hola!!

Si he establecido las propiedades en el constructor... También es posible que lo haya hhecho mal... A lo mejor he cometido un fallo garrafal y no me he dado cuenta porque me estoy iniciando en java...

A ver, te pongo un esquema de mi codigo, mi servlet es el siguiente:

public class HoraServlet extends HttpServlet
{
public HoraServlet()
{
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");
System.setProperty("javax.xml.transform.TransformerFactory","org.apache.xalan.processor.TransformerFactoryImpl");
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{

//Aqui va codigo que realiza funciones que necesito, pero funciona

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}

//Aqui tengo declarados varios metodos mas

//Este es el metodo que he definido para cambiar el valor del parametro
public void CambiarValor(String path, String dato, File fichero)
throws IOException
{
try
{
//Cargamos el fichero
InputStream is = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
is = loader.getResourceAsStream(path);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(is);

//El codigo siguiente es el que me mandaste, salvo algun pequeño cambio que he hecho porque me daba error de compilacion
}//Fin metodo CambiarValor
}

Pues bien, el fallo me da en la linea: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

Gracias por tu ayuda!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por maux (34 intervenciones) el 23/02/2007 11:00:19
Investigando por ahi, supongo que sera porque no me establece bien las propiedades...

Me he dado cuenta que al ser un servlet tendria que inicializarlo con el metodo init, por lo que he quitado el constructor que habia creado y lo he sustituido por el siguiente metodo:

public void init (ServletConfig config)
throws ServletException
{
super.init(config);
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");
System.setProperty("javax.xml.transform.TransformerFactory","org.apache.xalan.processor.TransformerFactoryImpl");
}

Pero nada... el fallo sigue siendo el mismo!!

Un saludo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar valor de un parametro de archivo xml

Publicado por wilson (1 intervención) el 12/02/2013 17:46:06
Hola, se me solucionó el problema agregando el jar xercesImpl.jar


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar