Como extraer el valor de un nodo con DOM

vikcen
17 de Mayo del 2006
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.

Gracias, un saludo.

vikcen
17 de Mayo del 2006
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'.

neossoftware
17 de Mayo del 2006
PORQUE KARAJO SE ESTAN PELEANDO CON DOM, SI EXISTEN FRAMEWORKS PARA HACER EL PARSEO EN EL XML COMO

EL BUEN JAKARTA DIGESTER, SOLO CONSTRUYES TUS REGLAS Y EN DOS QUE TRES PATADAS PARSEAS AL XML EXTRAYENDO LA INFORMACION QUE QUIERES!!!!!!!

fescalero
17 de Mayo del 2006
os dejo el codigo para recuperar valores con la ' ruta' del valor que queremos recuperar: a ver si os sirve

package seguridad;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;

import java.util.StringTokenizer;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class configuracion {

Document document;
org.w3c.dom.Node domNode;

public configuracion(String xml) throws ParserConfigurationException,
SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse( new File(xml) );
domNode = document;
}


/**
* 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"));
}

}



vikcen
17 de Mayo del 2006
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.