Manejo de archivos xml

En esta sección se atenderán las dudas relacionadas con sistemas de gestión de la calidad, procedimientos, buenas prácticas, normas y todo lo relacionado con aseguramiento de la calidad

Moderator: julianmartinez16

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Manejo de archivos xml

Post by xacarana » Tue Oct 04, 2016 7:26 am

Consultar los siguientes conceptos
  • ¿Para que sirve CDATA?
  • ¿Cómo crear un archivo xml?
  • ¿Cómo enviar un archivo xml?
  • ¿Cómo generar en el servidor un archivo xml?
  • ¿Cómo leer desde el servidor un archivo xml?
  • ¿Cómo procesar la información que trae un archivo xml?
  • Comparar lo mismo frente a un archivo JSON
Revisar el API de flickr y realizar una aplicación que por medio de una búsqueda de palabras claves, consulte un servicio que retorne en xml y luego de procesar la respuesta, la aplicación debe pintar las fotos que cumplen con el criterio de búsqueda.

Les recomiendo este artículo, sobre herramientas open source, para complementar el tema de interoperabilidad.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Wed Oct 05, 2016 7:54 pm

Les recomiendo para el tema que estamos viendo, le den una mirada a este artículo

Image
Technology start-ups need full stack developers for their versatility! However, as an organization matures, it needs more and more focused skills.

I’m not sure you can call yourself a full stack developer until you have worked in multiple languages, platforms, and even industries in your professional career. Full stack goes beyond a ‘senior engineer’, as it is along the same lines as a polyglot programmer but with a higher view of all the connecting pieces. Note that on my list, only items 3-5 involve writing code.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Tue Oct 11, 2016 7:18 am

Tarea
  1. Crear un archivo xml, apartir de un schema file
  2. Llenar el xml con datos dummy de prueba
  3. Usando xjc, crear los JAXB
  4. Realizar un programa en consola en java, que use la información de los archivos creados en el punto anterior
El archivo schema file trabajado en clase es

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/empresa" xmlns:tns="http://www.example.org/empresa" elementFormDefault="qualified">

    <complexType name="Direccion">
    	<sequence>
    		<element name="campo1" type="string" minOccurs="1" maxOccurs="1"></element>
    		<element name="campo2" type="string" minOccurs="1" maxOccurs="1"></element>
    		<element name="tipoVivienda">
    			<simpleType>
    				<restriction base="int">
    					<enumeration value="1"></enumeration>
    					<enumeration value="2"></enumeration>
    					<enumeration value="3"></enumeration>
    					<enumeration value="4"></enumeration>
    					<enumeration value="5"></enumeration>
    					<enumeration value="6"></enumeration>
    					<enumeration value="7"></enumeration>
    				</restriction>
    			</simpleType>
    		</element>
    		<element name="piso" type="int" minOccurs="1" maxOccurs="1"></element>
    		<element name="ciudad" type="string" minOccurs="1" maxOccurs="1"></element>
    		<element name="departamento" type="string" minOccurs="1" maxOccurs="1"></element>
    		<element name="pais" type="string" minOccurs="1" maxOccurs="1"></element>
    	</sequence>
    </complexType>

    <complexType name="Empleado">
    	<sequence>
    		<element name="nombre" type="string" minOccurs="1"
    			maxOccurs="1">
    		</element>
    		<element name="apellido" type="string" minOccurs="1"
    			maxOccurs="1">
    		</element>
    		<element name="telefono" type="string" minOccurs="1"
    			maxOccurs="1">
    		</element>
    		<element name="fechaNacimiento" type="date" minOccurs="1"
    			maxOccurs="1">
    		</element>
    		<element name="cedula" type="string" minOccurs="1"
    			maxOccurs="1">
    		</element>
    		<element name="cargo" type="string" minOccurs="1"
    			maxOccurs="1">
    		</element>
    		<element name="sueldo" type="double" minOccurs="1"
    			maxOccurs="1">
    		</element>
    		<element name="direccion" type="tns:Direccion" minOccurs="1" maxOccurs="1"></element>
    	</sequence>
    </complexType>

    <complexType name="Departamento">
    	<sequence>
    		<element name="nombre" type="string" minOccurs="1" maxOccurs="1"></element>
    		<element name="id" type="int" minOccurs="1" maxOccurs="1"></element>
    		<element name="empleado" type="tns:Empleado" minOccurs="1" maxOccurs="unbounded"></element>
    	</sequence>
    </complexType>



    <complexType name="Empresa">
    	<sequence>
    		<element name="nombre" type="string" minOccurs="1" maxOccurs="1"></element>
    		<element name="nit" type="string" minOccurs="1" maxOccurs="1"></element>
    		<element name="departamento" type="tns:Departamento" maxOccurs="unbounded" minOccurs="1"></element>
    	</sequence>
    </complexType>

    <element name="Empresa" type="tns:Empresa"></element>
</schema>
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
dsanta86
Posts: 58
Joined: Mon Jul 18, 2016 8:12 am

Re: Manejo de archivos xml

Post by dsanta86 » Tue Oct 11, 2016 12:38 pm

En el siguiente enlace pueden poner los datos para el XML, el esquema que maneja es el brindado por el profesor
https://docs.google.com/document/d/1Gfx ... sp=sharing
Hola soy David Santa, estudiante de ingeniería de sistemas
Cursando AppMoviles y Gestión de Calidad

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Thu Oct 13, 2016 6:53 am

Siguiente paso, creación de clases apartir del schema file, para realizar data binding con los datos del xml, para eso usamos el siguiente comando en línea de comandos, recuerde cambiar las rutas con la información de la ubicación de su proyecto o carpeta workspace de eclipse.

Code: Select all

"C:\Program Files\Java\jdk1.8.0_91\bin\xjc" -p co.edu.upb.practicaxml.model "C:\Users\B09S116est\workspace\PracticaXML\xsd\empresa.xsd" -d "C:\Users\B09S116est\workspace\PracticaXML\src"
pause
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Thu Oct 13, 2016 7:20 am

Ir a la carpeta de clases donde quedaron las clases que servirán de binding para el modelo y agregar la siguiente instrucción antes de donde empieza la clase.

Code: Select all

	@XmlRootElement(name="empresa")
El archivo debe quedar así:

Al principio de la clase, importar el paquete:

Code: Select all

	import javax.xml.bind.annotation.*;
y en el archivo Empresa.java

Code: Select all

	@XmlRootElement(name="empresa")
	public class Empresa {
		//Acá continua la definición de la clase
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Tue Oct 18, 2016 6:21 am

Validación de un archivo XML, apartir del schema file

Code: Select all

		Source xmlFile = null;
		Source schemaFile;
		SchemaFactory schemaFactory;
		Schema schema;
		Validator validator;
						
		try {
			schemaFile = new StreamSource(new File("xsd/proyecto.xsd"));
			xmlFile = new StreamSource(new File("xml/proyecto.xml"));
			schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
			schema = schemaFactory.newSchema(schemaFile);
			validator = schema.newValidator();
			validator.validate(xmlFile);
			System.out.println(xmlFile.getSystemId()+" es válido");
			//Acá podemos llamar un método para obtener los datos del xml y usarlo en la aplicación,
			//Porque tenemos la certeza que el xml recibido es valido
		} catch (Exception e) {
			System.out.println(xmlFile.getSystemId()+" NO es válido");
			System.out.println("Causa: "+e.getLocalizedMessage());
		}
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Tue Oct 18, 2016 6:38 am

Código para realizar el proceso de unmarshall de datos apartir de un archivo xml, este proceso se encarga de mapear los datos del xml en las clases que fueron creadas apartir del modelo

Code: Select all

			JAXBContext jc = JAXBContext.newInstance(Proyecto.class);
			Unmarshaller unmarshaller = jc.createUnmarshaller();
			Proyecto p = (Proyecto) unmarshaller.unmarshal(new File("xml/proyecto.xml"));
			
			System.out.println("-------------------------------------------");
			System.out.println("Título: " + p.getProyecto());
			System.out.println("Nombre: " + p.getNombre());
			System.out.println("Fecha Inicio: " + p.getFechaInicio());
			System.out.println("Fecha Terminacion: " + p.getFechaTerminacion());
			System.out.println("Porcentaje avance: " + p.getPorcentajeAvance());			
			System.out.println("-------------------------------------------");
			System.out.println("\n");

			List<Etapa> etapas = p.getEtapa();//De eta forma se extraen la información de los nodos hijo
			for (Etapa etapa : etapas){} //Con este ciclo se puede recorrer cada objeto hijo
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Thu Oct 20, 2016 6:23 am

Creación de un archivo dtd, para crear un archivo html apartir de un archivo xml.

Etiquetas dtd file

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:tns="http://www.example.org/proyecto">

	<xsl:output method="html" indent="yes" />
	<xsl:template match="/">
	   
	   <!-- Código html y xsl acá -->
	   
	</xsl:template>
</xsl:stylesheet>
Atención: En la línea

Code: Select all

	xmlns:tns="http://www.example.org/proyecto"
Se debe cambiar el nombre proyecto, por el namespace especifico con el que se este trabajando. Esto es lo que permite que el archivo entienda en que contexto va a buscar la información que requiere
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Manejo de archivos xml

Post by xacarana » Thu Oct 20, 2016 6:34 am

Para iterar sobre los datos, se usan sentencias de programación representadas en la definición xsl, así

tns:Proyecto es el nodo que se esta analizando

Code: Select all

	<xsl:for-each select="tns:Proyecto">

		<!-- etiquetas html para visualizar los datos -->

	</xsl:for-each>
Para iterar sobre un nodo hijo se hace de la siguietne forma

Code: Select all

	<xsl:for-each select="tns:Proyecto/tns:etapa">
	
		<!-- etiquetas html para visualizar los datos -->
	
	</xsl:for-each>
Y para hacer referencia a la información que tiene un nodo

Code: Select all

	
	<xsl:value-of select="tns:nombre" />
	
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

Post Reply