E' possibile in java trasformare un file .docx in un file .xml utilizzando xslt o si possono fare solo trasformazioni xml-html, xml-xml?
E se si con quale classe?
E' possibile in java trasformare un file .docx in un file .xml utilizzando xslt o si possono fare solo trasformazioni xml-html, xml-xml?
E se si con quale classe?
L'output di una trasformazione con XSLT può essere tecnicamente qualunque cosa, da testo "puro", HTML/XML o altro.Originariamente inviato da pavimento
E' possibile in java trasformare un file .docx in un file .xml utilizzando xslt o si possono fare solo trasformazioni xml-html, xml-xml?
Puoi usare le API di JAXP. Però innanzitutto devi stabilire quale processore XSLT usare (es. Saxon). JAXP è solo una API "standard" che si mette al di sopra di parser XML e processori XSLT.Originariamente inviato da pavimento
E se si con quale classe?
Esempio:
Vedere la documentazione di TransformerFactory per sapere come viene determinato e scelto il processore XSLT.codice:import javax.xml.transform.*; import javax.xml.transform.stream.*; public class TransformTest { public static void main(String[] args) { try { TransformerFactory tfactory = TransformerFactory.newInstance(); Templates t = tfactory.newTemplates(new StreamSource("input.xsl")); Transformer transformer = t.newTransformer(); transformer.transform(new StreamSource("input.xml"), new StreamResult("output.html")); } catch (Exception e) { System.out.println(e); } } }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ti ringrazio.
Ho provato a fare come nell'esempio da te postato.
ERRORE: 'Errore durante la verifica del tipo di espressione 'funcall(document-uri, [step("self", -1)])'.'
L'errore quindi credo sia nel foglio di stile in corrispondenza di questo:
<xsl:variable name="document-uri-ext" select="lower-case(string(tokenize(document-uri(.), '\.')[last()]))"/>
Cosa ho sbagliato?
Non sono (ancora) particolarmente esperto di XPath ma mi sembra che hai usato diverse cose di XPath 2.0. Quale processore XSLT stai usando?Originariamente inviato da pavimento
Cosa ho sbagliato?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Dovrebbe essere quello di Altova, ma siccome non sono affatto sicuro di aver messo le cose nel modo giusto non esiste un modo per sapere quale processore xslt si sta effettivamente utilizzando?
La cosa più semplice che puoi fare è stampare il nome della classe degli oggetti TransformerFactory/Transformer ottenuti.Originariamente inviato da pavimento
Dovrebbe essere quello di Altova, ma siccome non sono affatto sicuro di aver messo le cose nel modo giusto non esiste un modo per sapere quale processore xslt si sta effettivamente utilizzando?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Il nome della classe è com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCD TMManager
No, il processore XSLT è "XSLTC", quello interno, di default, fornito con Java SE (dalla 5.0).Originariamente inviato da pavimento
Il nome della classe è com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCD TMManager
La documentazione di newInstance() di TransformerFactory spiega credo chiaramente la logica di ricerca e selezione del processore XSLT.
E se stai usando almeno Java 6, c'è l'altro newInstance(String,ClassLoader) a cui puoi passare direttamente il nome della classe "factory" di un processore.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ho capito.
Però a questo punto visto che viene fornito direttamente il processore XSLT mi piacerebbe utilizzarlo.
E quindi son di nuovo a questo punto:
<xsl:variable name="document-uri-ext" select="lower-case(string(tokenize(document-uri(.), '\.')[last()]))"/>
xpath2 non è supportato?
XSLTC supporta solo XSLT 1.0 (quindi XPath 1.0).Originariamente inviato da pavimento
Però a questo punto visto che viene fornito direttamente il processore XSLT mi piacerebbe utilizzarlo.
Prova a usare questo XSL (il documento XML può essere qualunque ... anche con tag radice vuoto):
Scusa ma ... dove è la difficoltà nel impostare una system property o passare una stringa con il nome della factory (Java 6, come ho detto)?codice:<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title>XSL System Properties</title></head> <body style="font-family:sans-serif; margin:1em"> Version: <xsl:value-of select="system-property('xsl:version')"/></p> Vendor: <xsl:value-of select="system-property('xsl:vendor')"/></p> Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')"/></p> <xsl:if test="system-property('xsl:version') >= 2"> Product name: <xsl:value-of select="system-property('xsl:product-name')"/></p> Product version: <xsl:value-of select="system-property('xsl:product-version')"/></p> Schema aware: <xsl:value-of select="system-property('xsl:is-schema-aware')"/></p> Supports serialization: <xsl:value-of select="system-property('xsl:supports-serialization')"/></p> Supports backwards compatibility: <xsl:value-of select="system-property('xsl:supports-backwards-compatibility')"/></p> </xsl:if> </body> </html> </xsl:template> </xsl:stylesheet>
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet