/ / XML-Datei mit Ergebnisdokument teilen und javax.xml.transform.Transformer - xslt

XML-Datei mit Ergebnisdokument teilen und javax.xml.transform.Transformer - xslt

Ich habe eine XSLT, die große Xml-Datei in mehrere XML-Datei mit dem folgenden Xslt-Code teilen.

<xsl:variable name="filename" select="resolve-uri(concat("splitfilesfolder/",position(),".xml"))" />
<xsl:result-document href="{$filename}" format="xml">
<--XML file content --->
</xsl:result-document>

Dann habe ich diese XSLT in meinem Code verwendet, um XML-Eingabedateien mit javax.xml.transform.Transformer zu teilen.

TransformerFactory tFactory = TransformerFactory.newInstance();
Source xslSource =  new StreamSource(xsltfilepath);

Transformer trans = tFactory.newTransformer(xslSource);
trans.transform(new StreamSource(xmlFileName), new StreamResult(splitfilesfolder));

Hier möchte ich den gleichen Pfad für neue Streamresult geben, wie es im Ergebnisdokument Pfad ist, wie kann ich mehrere XML-Datei mit Ergebnis Doucment und javax.xml.transform.Transform ??

Kann mir bitte jemand eine Lösung geben?

Danke im Voraus.

Antworten:

3 für die Antwort № 1

<xsl:result-document> ist in XSLT 2.0 javax.xml.transform unterstützt XSLT 2.0 nicht, also habe ich den Eindruck, dass Sie mit eingebauten Transformatoren keinen Glück haben.

Versuchen Sie es mit Sachse stattdessen. Fügen Sie einfach die JAR-Datei zu Ihrem Klassenpfad hinzu und Sie werden eingestellt.

Es gibt auch einen Fehler in Ihrem XSLT

 <xsl:result-document href="{$filename}" format="xml">

Sollte sein

 <xsl:result-document href="{$filename}" method="xml">

Um das Verzeichnis in Ihre XSLT zu bekommen, verwende ich

Java

trans.setParameter("dir", "dirname");

XSL

<xsl:param name="dir"/>

0 für die Antwort № 2

Erstellen Sie eine Instanz von Saxons TransformerFactorydirekt, d.h. TransformerFactoryImpl factory = neue TransformerFactoryImpl (); Verwenden Sie nicht den hirntoten JAXP TransformerFactory.newInstance (); ... da Sie eindeutig etwas anderes als Saxons Implementation bekommen.