xml-java

Este es tu lugar para hablar de programación, compartir, crear y desarrollar nuevos proyectos

Moderador: Moderadores

xml-java

Notapor Rick » Mar Oct 29, 2013 1:10 am

Hola amigos, espero esten bien, en esta ocacion me estoy adentrando en lo que es xml en java, parsear documentos xml por medio de parseadores, tanto documentos xml locales como de alguna web, y ahora estoy tratando de parsear un documento de un servidor, en el cual el objetivo es poder entrar en el, pero se puede entrar por medio de intercambio de mensajes, el me responde un mensaje con una llave y yo se la devuelvo, sicesivamente me manda otro mensaje pero con una accion a realizar con variables numericas, sumar, restar, dividir y multiplicar, hasta que en un numero n de veces mientras le responda correctamente me avisara que lo hice bien y podre entrar en el.

en lo que es la codificacion lo estoy haciendo con DOM, llego hasta el segundo paso en donde me da las variables numericas con el tipo de accion, pero estoy trabado en como saber como puedo tomar la etiqueta de accion la cual va cambiando de nombre segun la acicon que me diga, sumar, restar, etc, el codigo el cual tengo es este:

Código: Seleccionar todo
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.*;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class Taller_examen {
   
public static String consultarServidor(String textoEnvio) throws IOException{
String urlParameters = "dato=" + URLEncoder.encode(textoEnvio, "UTF-8");
String request = "http://www.eduonline.cl/transaccion.php";
//Clase URL
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches(false);

DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();

BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));

String linea;
String texto = "";
while ((linea = in.readLine()) != null) {
texto += linea;
}
connection.disconnect();
return texto;
}
public static void main(String[] args)
throws MalformedURLException, IOException, ParserConfigurationException, TransformerConfigurationException, TransformerException, SAXException {
String peticionServidor = consultarServidor("");
System.out.println(peticionServidor);//el saludo del servidor
//Instanciación de un objeto que permite generar
//analizadores DOM
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

//Generación de el objeto que analizará
//el XMl mediante DOM.
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document documentoSalida = dBuilder.parse(new InputSource(new StringReader(peticionServidor)));
documentoSalida.getDocumentElement().normalize();

NodeList listaNodos = documentoSalida.getElementsByTagName("llave");
String llave = listaNodos.item(0).getTextContent();

/*creando la respuesta para el servidor*/
Document documento = dBuilder.newDocument();
Element eRespuesta = documento.createElement("respuesta");
Element eResultado = documento.createElement("resultado");
Element eLlave = documento.createElement("llave");

eRespuesta.appendChild(eResultado);
eRespuesta.appendChild(eLlave);
eLlave.appendChild(documento.createTextNode(llave));
documento.appendChild(eRespuesta);

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();

DOMSource origen = new DOMSource(documento);
//destino string
StreamResult sResultado = new StreamResult(new StringWriter());
//traspaso de documento a StringWriter
transformer.transform(origen, sResultado);
String xmlRespuesta = sResultado.getWriter().toString();
peticionServidor = consultarServidor(xmlRespuesta);
System.out.println(peticionServidor);

//=========================TOMANDO LOS VALORES DE LA ETIQUETA< VALOR>===============
DocumentBuilder dBuilder2 = dbFactory.newDocumentBuilder();
Document documentoSalida2 = dBuilder2.parse(new InputSource(new StringReader(peticionServidor)));
//documentoSalida2.getDocumentElement().normalize();
NodeList listaNodos2 = documentoSalida2.getElementsByTagName("peticion");
try{//aqui trato de tomar el documeto y sacar todos los datos de la etiqueta valor
for (int i = 0; i < listaNodos2.getLength(); i++) {
    //obtención de un nodo empleado (en la posicion i)
    Node nEmpleado = listaNodos2.item(i); //si el nodo es de tipo ELEMENT_NODE (elemento)
    if (nEmpleado.getNodeType() == Node.ELEMENT_NODE) { //Casting desde Node a Element.
        Element eEmpleado = (Element) nEmpleado; //Obtención de ID desde atributo del elemento
        //Obtención del nombre (FirstName) desde un elemento //en el interior del elemento 'Empleado'
        NodeList lDato = eEmpleado.getElementsByTagName("valor");

        } } }catch(Exception e) { e.printStackTrace(); }
/*String valor = listaNodos2.item(0).getTextContent();
System.out.println(valor);*/
//=========================================================================================
}}



ahora para saber como son los archivos xml que nos manda y los que hayq ue mandar estos son sus respectios DTD:

Bienvenida del servidor

<!ELEMENT bienvenida (mensaje,llave)>
<!ELEMENT mensaje (#PCDATA)>
<!ELEMENT llave (#PCDATA)>

Petición del servidor

<!ELEMENT peticion (accion,llave)>
<!ELEMENT accion (valor+)>
<!ELEMENT valor (#PCDATA)>
<!ELEMENT llave (#PCDATA)>

Error en petición (devuelto por servidor)

<!ELEMENT error (#PCDATA)>

Aceptación en el club (fin del proceso)

<!ELEMENT aceptado(#PCDATA)>

Respuesta de cliente

<!ELEMENT respuesta (resultado,llave)>
<!ELEMENT resultado(#PCDATA)>
<!ELEMENT llave (#PCDATA)>

como dije anteriormente, en la peticion del servidor, la <accion> que es un elemento etiqueta, va cambiando cuando corro el programa, el servidor me saluda, me da la llave, yo tomo esa llave y la mando, continuamente me manda otro menaje con la accion:

Imagen

bueno amigos esperando de su ayuda, la tomare gustosamente, asi aprendemos todos, gracias.
Rick
:-)
:-)
 
Mensajes: 32
Registrado: Mié Oct 17, 2007 12:39 am

Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron