Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
Como extraer el valor de un nodo con DOM
Enviado por vikcen el día 29 de noviembre de 2005
Hola,
Si yo tengo en un documento XML algo como
<nombre_tag>valor_tag</nombre_tag>
como puedo simplemente recuperar el texto \"valor_tag\" y asignarlo a una variable de tipo String.
He usado el método getNodeValue() y siempre me devuelve null para un nodo como el indicado en el ejemplo, en cambio con getNodeName() si recupero el nombre del tag en este caso 'nombre_tag', el nodo es del tipo ELEMENT_NODE.
Vale ya se como va, tendria que volver hacer una llamada a getChildNodes para recuperar un nodo de tipo texto que me da el valor, en este caso 'valor_tag'.
este es el constructor de la clase en la que me creo un objeto Node desde el documento xml. Ahora lo que hay que hacer es coger el valor cogiendo los childNodes de este.
Imagina que tengo un documento como este
<?xml version=\'1.0\' encoding=\'windows-1252\'?>
<config>
<bdpruebas>
<url>miurl</url>
<login>milogin</login>
<password>mipass</password>
</bdpruebas>
</config>
Entonces me crearia un metodo en la clase para coger los valores. Po rejempo para la url:
public String bdpruebas_url(){
return document.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
//-----------------------------------<config>--------------------<bdpruebas>------------------<url>----------------------------[#text]
}
Hay que tener en cuente un detalle:
Cuando ejecutamos la acceion getchild nodes lo que devuelve es:
es por eso lo de los valores 0 y 1 al coger los nodos.
Resulta un poco coñazo y estoy imprememtando un metodo para que dado una cadena tipo \'config.bdpruebas.url\' te devuelva el valor, ya que hay metodos para poder preguntar a un nodo si se llama \'bdpruebas\' o lo que sea. Pero para salir del paso funciona.
de todas fomras probare las librerias que han comentado antes.
/**
* Funcion que devuelve el valor de una camino de fichero xml.
* si no lo encuentra devuelve null.
* @param camino
* @return
*/
public String damevalor(String camino) {
String resultado = null;
StringTokenizer micamino = new StringTokenizer(camino, "/");
Node nodo = domNode;
//Seguimos buscando en los nodos mientras tengamos tokens.
while (nodo != null && micamino.hasMoreTokens() ) {
NodeList nl = nodo.getChildNodes();
String token = micamino.nextToken();
//ponemos nodo a null para obligar a que haya un nodo que nos sirva.
nodo=null;
for ( int i=0;i<nl.getLength();i++){
Node sigNodo =nl.item(i);
String name = sigNodo.getNodeName();
//Si encontramos el elemento salimos del for.
if ( name.equals(token)){
nodo=sigNodo;
i=nl.getLength();
}//if
}//for
}//while
//Ahora en nodo tenemos el nodo que tiene el valor que queremos.
//Siempre que el nodo no sea null.
if (nodo!=null){
resultado = nodo.getFirstChild().getNodeValue();
}
return resultado;
}//fin de damevalor
public static void main(String[] args) {
configuracion c = null;
try {
c = new configuracion("configuracion.xml");
} catch (Exception e) {
System.out.println("error");
}
System.out.println(c.damevalor("config/df/password"));
}