Hola, amigos.
Tengo el siguiente archivo de texto (.txt)
XX000000000000000111Example
OO001Test
Donde cada valor de cada linea tiene un limite de caracteres, de acuerdo al ID que se valla leyendo primeramente; es decir, si el ID es igual a XX entonces debe leer los caracteres especificados de acuerdo a ese ID, si el ID es OO entonces leera los especificados para ese ID.
*Producto:
Id (2 caracteres): XX
Codigo(18 caracteres): 000000000000000111
Descripcion(10 caracteres): Example
*Usuario:
Id (2 caracteres): OO
Numero(3 caracteres): 001
Nombre(40 caracteres): Test
Tengo mi aplicacion Java Standalone en donde realizo precisamente esas validaciones correspondientes, como los recupera de una base de datos, los voy cortando si es mayor o si es muy corto lo relleno con espacios o ceros segun sea el caso, por lo tanto, el limite de los valores por cada ID sera fijo.
Me gustaria leer ese archivo y convertirlo a un archivo XML, donde la creacion del archivo XML lo hago con Saxon, mediante la siguiente forma.
try {
Processor proc = new Processor(false);
XsltCompiler comp = proc.newXsltCompiler();
XsltExecutable exp = comp.compile(new StreamSource(new File("archivos/xsl/convertir.xsl")));
Serializer out = new Serializer();
out.setOutputProperty(Serializer.Property.METHOD, "xml");
out.setOutputProperty(Serializer.Property.INDENT, "yes");
out.setOutputFile(new File("archivos/xml/canada.xml"));
XsltTransformer trans = exp.load();
trans.setInitialTemplate(new QName("main"));
trans.setDestination(out);
trans.transform();
} catch (SaxonApiException sae) {
sae.printStackTrace();
}
Si se corre el siguiente codigo me crea el archivo correspondiente, de acuerdo al archivo .xsl que yo eh definido, para este caso hice algo sencillo como se muestra a continuación.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template name="main" match="/">
<producto>
<codigo>8</codigo>
</producto>
</xsl:template>
</xsl:stylesheet>
Ahora, serian tan amables de ayudarme como hago que lea mi archivo de texto para posteriormente ir obteniendo la salida correspondiente.
<producto>
<identificador>XX</identificador>
<codigo>000000000000000111</codigo>
<descripcion>Example</descripcion>
</producto>
<usuario>
<identificador>OO</identificador>
<codigo>001</codigo>
<descripcion>Test</descripcion>
</usuario>
De antemano, muchas gracias por su ayuda.