java xml xslt csv saxon

Saxon en Java: XSLT para CSV a XML



(1)

Está utilizando la API de JAXP, que fue diseñada para XSLT 1.0. Si desea utilizar las características de XSLT 2.0, como la capacidad de iniciar una transformación en una plantilla con nombre, le recomendaría utilizar la interfaz s9api, que está mucho mejor diseñada para este propósito.

Sin embargo, si tiene muchos códigos JAXP existentes y no desea reescribirlos, generalmente puede lograr lo que desea bajando los objetos JAXP a las clases subyacentes de implementación de Saxon. Por ejemplo, puede convertir JAXP Transformer como net.sf.saxon.Controller, y eso le da acceso a controller.setInitialTemplate (); cuando se trata de llamar al método transform (), solo se proporciona null como parámetro de origen.

Por cierto, si estás escribiendo código que requiere un procesador 2.0, entonces no usaría TransformerFactory.newInstance (), que te dará cualquier procesador XSLT antiguo que encuentre en el classpath. Use net.sf.saxon.TransformerFactoryImpl () nuevo, que (a) es más robusto y (b) mucho más rápido.

Continuamente de esta pregunta: XSLT: CSV (o archivo plano, o texto sin formato) a XML

Entonces, tengo un XSLT desde aquí: http://andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html

Y convierte un archivo CSV en un documento XML. Lo hace cuando se usa con el siguiente comando en la línea de comando:

java -jar saxon9he.jar -xsl: csv-to-xml.csv -it: main -o: output.xml

Entonces ahora la pregunta es: ¿cómo hago esto en mi código Java?

En este momento tengo un código que se ve así:

TransformerFactory transformerFactory = TransformerFactory.newInstance(); StreamSource xsltSource = new StreamSource(new File("location/of/csv-to-xml.xsl")); Transformer transformer = transformerFactory.newTransformer(xsltSource); StringWriter stringWriter = new StringWriter(); transformer.transform(documentSource, new StreamResult(stringWriter)); String transformedDocument = stringWriter.toString().trim();

(The Transformer es una instancia de net.sf.saxon.Controller ).

El truco en la línea de comando es especificar "-it: main" para señalar directamente a la plantilla indicada en el XSLT. Esto significa que no tiene que proporcionar el archivo de origen con el indicador "-s".

El problema comienza nuevamente en el lado de Java. ¿Dónde / cómo debería especificar esto "-it: main"? ¿No rompería esto otros XSLT que no necesitan esa especificación? ¿Tendría que nombrar todas las plantillas en cada archivo XSLT como "principal"? Dada la firma del método de Transformer.transform (), tengo que especificar el archivo de origen, por lo tanto, ¿eso no frustra todo el progreso que he logrado al resolver esto?

Editar: Encontré el s9api escondido dentro de saxon9he.jar, si alguien lo está buscando.