Historias
Slashboxes
Comentarios
 

Login Barrapunto

Login

[ Crear nueva cuenta ]

McPolu (19560)

McPolu
  McPolu@gmail.com
http://mcpolu.blogspot.com/

Pues, desde siempre, ser lúcido y español aparejó gran amargura y poca esperanza.

-- Reading some of the comments to your blog always restores my lack of faith in humanity.
-- Where There is a Will, There is a Way.
-- Cuando los radiadores funcionan y dejan de molestar se conoce la verdadera escencia humana.
-- Unas lágrimas sin compás son un berrinche.
-- Al abrir su andadura se ven los castillos de Arcalaus el maligno, rojos en el fuego del ocaso.
-- In the process of gaining our rightful place, we must not be guilty of wrongful deeds.
-- Sé que los seres humanos y los peces podrán coexistir en paz.
-- Asi es como muere la libertad, con un estruendoso aplauso.
-- Minino de Cheshire, ¿podrias decirme, por favor, qué camino debo seguir para salir de aquí?

Down Kill Up Publicidad

Bitácora de McPolu (19560)

Jueves, 13 de Septiembre 2007

Saxon.NET

09:34h.
Bitácoras
Me ha surgido la necesidad de utilizar XSLT 2.0 desde C# y me he encontrado con la desagradable sorpresa de que la clase XslCompiledTransform, la recomendada para estos menesteres en las librerías de .NET, sólo soporta XSLT 1.0. las diferencias entre XSLT 1.0 y 2.0 son notables y el trabajo que llevaría sacar funcionalidad de mis ficheros .xslt y ponerla en .cs sería considerable.

Por lo tanto me he puesto a buscar alguna otra librería para .NET que soporte XSLT 2.0 y lo mejor que he encontrado es saxon, de la empresa saxonica. Van por la versión 8.9 y se ofrecen dos paquetes: Saxon-B, que es open source, y Saxon-SA, que es de pago. La principal diferencia es la validación de esquemas, que está incluida en -SA pero no en -B. De momento la versión -B me vale y la he incorporado al proyecto.

La API no es muy cómoda que digamos pero por lo menos está bien documentada. La mayor pega que le encuentro es la forma de pasar parámetros al motor. Los ejemplos de código vienen en un .zip de 10 megas que trae muchas otras cosas y en internet sólo he encontrado un ejemplo que resulta difícil de leer y además no incluye parámetros.

Para hacerle la vida un poco más fácil a los que vengan detrás, ahí va mi ejemplo:

// XSLT Processor
Processor processor = new Processor();

// Load the style sheet.
Uri uri = new System.Uri(xsltLocation);
XsltTransformer transformer = processor.NewXsltCompiler().Compile(uri).Load();

// Input
XmlDataDocument xmlDoc = new XmlDataDocument(myDataSet);
transformer.InitialContextNode = processor.NewDocumentBuilder().Build(xmlDoc);

// Output
Serializer serializer = new Serializer();
serializer.SetOutputFile(destinationFolder + @"\" + outputPath);

// Parameters
transformer.SetParameter(new QName(null,"param1"), new XdmAtomicValue("value1")));
transformer.SetParameter(new QName(null,"param2"), new XdmAtomicValue(42.0));

// Transformation
transformer.Run(serializer);
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • por sammael (16347) el Jueves, 13 Septiembre de 2007, 09:53h (#958917)
    ( http://barrapunto.com/ | Última bitácora: Lunes, 24 Febrero de 2014, 10:03h )
    las cosas no estan tan bien como parece, hace unos meses lo estuve probando porque necesitaba hacer operaciones con XPath y XQuery y en todas partes recomendaban Saxon...

    no se la parte XSLT, no la probe (suelo usar Xerces o JAXP), pero de XQuery y XPath faltaban muchas cosas que supuestamente si que estaban implementadas (sobre todo para trabajar con axis en XPath) y disponibles en la version gratuita...

    mi consejo es que antes de continuar, hagas pruebas de concepto para todas las operaciones que tengas que hacer con esa biblioteca intentando probar el mayor numero de casos posible, no sea que luego te encuentres con sorpresas, como digo, hace varios meses (7-8) que lo probe, asi que espero que hayan rellenado esos huecos, pero aun asi, yo iria con cuidado...
    --

    Dale fuego a un hombre y estara caliente un dia, prendele fuego y estara caliente el resto de su vida.
  • 1 respuesta por debajo de tu umbral de lectura actual.