Wie ein XML-Dokument als ein Parameter an eine XSL passiert in Java (Oracle XDK) zu transformieren?

StackOverflow https://stackoverflow.com/questions/2001548

  •  18-09-2019
  •  | 
  •  

Frage

Ich versuche, ein XML-Dokument zu einem XSLT-Stylesheet als Parameter zu übergeben. Ich glaube, dass der Code die Oracle XDK für Transformationen verwendet (es ist mit JDK 1.4.2 und Frühling, und ich bin neu in der Code-Basis, so dass ich bin mir nicht sicher, was am Ende geladen wird immer). In meinem ersten Versuch habe ich gerade ein Dokument-Objekt und stellen Sie diese als Parameter auf dem Transformator, sondern versucht, die Variable in den Baum zu kopieren kein Ergebnis geben. Fragen, die in den Sinn kommen, sind:

  1. ist dies sogar möglich, im allgemeinen Fall von XSLT-Transformatoren? (Es scheint, wie es sein sollte, wie es allgemein XSLT-Variablen / Parameter nodesets enthalten können)

  2. ist es möglich, speziell mit dem Orakel XDK (oder xalan, die auch in dem Classpath ist)?

  3. Wenn ja, wie mache ich das?

War es hilfreich?

Lösung

Die Antwort ist, dass dies möglich ist, aber es ist nicht intuitiv, zumindest für den Oracle XSL-Prozessor. Ich habe versucht, das folgende (ohne Funktion) Anrufungen (Name geändert, um die Unschuldigen zu schützen):

Document x = createDocumentForMe();
transformer.addParameter("param",x);

und

Document x = createDocumentForMe();
transformer.addParameter("param",new DOMSource(x));

(dieser zweite auf der Grundlage, dass vielleicht DOMSource funktionieren würde, weil es die java.xml.transform Schnittstelle zum DOM war). Der Aufruf, die für mich am Ende arbeitete, war die Einsicht zu nehmen, dass XSL XPath verwendet, und die gültigen Typen für die Variable sind im Wesentlichen Strings oder nodesets und XPath gibt nodesets. Die folgenden Werke für mich:

Document x = createDocumentForMe();
XPathExpression xpe = XPathFactory.newInstance().newXPath().compile("/");
transformer.addParameter("param",xpe.evaluate(x, XPathConstants.NODESET));

, die im Grunde verwendet XPath, um eine nodeset zu bekommen nur das Root-Dokument von der übergebene in DOM-Objekt enthält. Dies scheint jedoch ein bisschen wie ein Hack, und kann mit anderen XSL-Prozessoren nicht funktionieren, so YMMV ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top