Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Trasformazione con xslt

    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?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Trasformazione con xslt

    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?
    L'output di una trasformazione con XSLT può essere tecnicamente qualunque cosa, da testo "puro", HTML/XML o altro.

    Originariamente inviato da pavimento
    E se si con quale classe?
    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.

    Esempio:
    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);
            }
        }
    }
    Vedere la documentazione di TransformerFactory per sapere come viene determinato e scelto il processore XSLT.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    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?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da pavimento
    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?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    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?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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?
    La cosa più semplice che puoi fare è stampare il nome della classe degli oggetti TransformerFactory/Transformer ottenuti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Il nome della classe è com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCD TMManager

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da pavimento
    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).

    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    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?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da pavimento
    Però a questo punto visto che viene fornito direttamente il processore XSLT mi piacerebbe utilizzarlo.
    XSLTC supporta solo XSLT 1.0 (quindi XPath 1.0).

    Prova a usare questo XSL (il documento XML può essere qualunque ... anche con tag radice vuoto):

    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>
    Scusa ma ... dove è la difficoltà nel impostare una system property o passare una stringa con il nome della factory (Java 6, come ho detto)?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.