elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Multiples archivos con XSLT & Saxon en Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Multiples archivos con XSLT & Saxon en Java  (Leído 1,940 veces)
Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Multiples archivos con XSLT & Saxon en Java
« en: 23 Marzo 2015, 22:27 pm »

Que tal amigos, soy nuevo en el foro y aquí vengo con un nuevo tema para ustedes, espero puedan apoyarme, como dice el título del tema, tengo un pequeño inconveniente con las hojas de estilo XSL, soy nuevo con las plantillas y no estoy seguro si estoy realizando las cosas correctamente.

Tengo una carpeta con archivos de texto como se muestra a continuación.

descarga1.txt
descarga2.txt
descarga3.txt
...

Dichos archivos se necesitan convertir a un archivo XML, el cual realizo correctamente con la implementación del código siguiente.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />

<xsl:variable name="text" select="tokenize(unparsed-text('file:///C:/Users/Quality/Documents/ProyectoComerciales/download_files/descarga01.txt'),'&#xD;&#xA;')" />

<xsl:template name="main" match="/">
<content>
<items>
<xsl:for-each select="$text">
<xsl:variable name="idi" select="substring(.,1,2)" />
<xsl:if test="$idi = 'OH'">
<item>
<xsl:element name="id"><xsl:value-of select="$idi" /></xsl:element>
<xsl:element name="folio"><xsl:value-of select="substring(.,3,10)" /></xsl:element>
</item>
</xsl:if>
</xsl:for-each>
</items>
<products>
<xsl:for-each select="$text">
<xsl:variable name="idp" select="substring(.,1,2)" />
<xsl:if test="$idp = 'BL'">
<product>
<xsl:element name="id"><xsl:value-of select="$idp" /></xsl:element>
<xsl:element name="code"><xsl:value-of select="substring(.,3,18)" /></xsl:element>
</product>
</xsl:if>
</xsl:for-each>
</products>
<users>
<xsl:for-each select="$text">
<xsl:variable name="idu" select="substring(.,1,2)" />
<xsl:if test="$idu = 'LH'">
<user>
<xsl:element name="id"><xsl:value-of select="$idu" /></xsl:element>
<xsl:element name="num"><xsl:value-of select="substring(.,3,6)" /></xsl:element>
</user>
</xsl:if>
</xsl:for-each>
</users>
</content>
</xsl:template>
</xsl:stylesheet>

Si realizamos la llamada desde Java a este archivo tendremos una conversión exitosa, sin embargo, como podrán ver en la tercera línea del código se puede observar que yo le estoy diciendo que archivo quiero que lea, por lo tanto ahí es donde viene mi problema. Necesito que lea todos los archivos que se encuentran dentro de mi carpeta y valla creando un XML por cada archivo que va leyendo, investigue en Internet que puedo implementar la función collection() que el mismo XSL tiene, por lo que quedaría de la siguiente manera.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>

<xsl:template name="main" match="/">
<xsl:for-each select="collection('file:///C:/Users/Quality/Documents/ProyectoComerciales/download_files/?select=*.txt')">
<xsl:variable name="file" select="tokenize(document-uri(.),'/')[last()]"/>
<xsl:variable name="text" select="tokenize(unparsed-text($file),'&#xD;&#xA;')"/>
<xsl:for-each select="$text">
<content>
...
</content>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Sin embargo, cuando realizo la ejecución obtengo el siguiente mensaje de error "el contenido no está permitido en el prólogo". La llamada desde Java la realizo mediante el uso del siguiente código Saxon (saxon9he.jar)

try {
Processor proc = new Processor(false);
XsltCompiler comp = proc.newXsltCompiler();
XsltExecutable exp = comp.compile(new StreamSource(new File("C:/Users/Quality/Documents/" +
"ProyectoComerciales/xsl/convertir.xsl")));
Serializer out = new Serializer();
out.setOutputProperty(Serializer.Property.METHOD, "xml");
out.setOutputProperty(Serializer.Property.INDENT, "yes");
out.setOutputFile(new File("C:/Users/Quality/Documents/ProyectoComerciales/xml/descarga.xml"));
XsltTransformer trans = exp.load();
trans.setInitialTemplate(new QName("main"));
trans.setDestination(out);
trans.transform();
} catch (SaxonApiException sae) {
sae.printStackTrace();
}

Serían tan amables de apoyarme con este tema, de antemano, gracias por su tiempo.


« Última modificación: 23 Marzo 2015, 22:30 pm por Lind L. Tailor » En línea

Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Multiples archivos con XSLT & Saxon en Java
« Respuesta #1 en: 24 Marzo 2015, 17:41 pm »

Como estan, amigos!

Bueno, simplemente para cerrar el tema, ya que encontré como obtener lo que quería, ahora solo es cuestión de manipular esa colección de archivos de texto, sin mas que comentar gracias por su tiempo.

P.D. Si están interesados en saber como lo resolví, contáctenme y con gusto brindo el código.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Subir multiples archivos de una vez.
PHP
newinl 4 8,425 Último mensaje 7 Enero 2008, 21:33 pm
por newinl
JAVA como declarar multiples objetos a la vez
Java
r7pyrred 2 2,642 Último mensaje 19 Febrero 2013, 01:41 am
por r7pyrred
Generar XML a partir de un archivo de texto (.txt) usando XSLT en Java
Java
Lind L. Tailor 3 6,174 Último mensaje 13 Marzo 2015, 19:27 pm
por Usuario Invitado
Leer todas las filas de un archivo de texto plano usando XSLT en Java
Java
Lind L. Tailor 0 2,126 Último mensaje 17 Marzo 2015, 23:42 pm
por Lind L. Tailor
Ayuda problema con Multiples Fuentes en Java
Java
Mario Olivera 0 1,831 Último mensaje 28 Noviembre 2015, 12:42 pm
por Mario Olivera
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines