Rufen Sie die Java-Instanz Methoden, die in XSLT
Ich bin mit Saxon (die ich verwenden könnte, Xalan, wenn nötig), XSLT-Prozessor, um einige der transformation.
Ich will übergeben Sie die Instanz der unter der Objekt-auf die XSLT-template als parameter.
public class Test {
private String value;
public Test(String v) {
value = v;
}
//getters, setters etc.
}
So dass ich dieses Objekt erstellen, dh.
Test test = new Test("test");
transformer.setParameter("test", test);
In der XSLT-Datei erkläre ich die param:
<xsl:param name="test" required="yes" as="jt:com.whatever.package.Test" xmlns:jt="http://saxon.sf.net/java-type"/>
Nun ist meine Frage, wie kann ich rufen Sie eine Instanz-Methode (ie. getValue() ) auf dieses Objekt innerhalb von XSLT? Ist es überhaupt möglich? Ich weiß, ich kann Aufruf von statischen Methoden, die von verschiedenen Java-Klassen, aber das ist nicht genau das, was ich Suche.
Außerdem ist es möglich, zum Auffüllen von Java-Objekten innerhalb von XSLT, dh. rufen Sie setter-Methoden für Instanz eines Objekts und verwenden Sie dann das Objekt mit den neuen Werten im Java-code nach der transformation abgeschlossen ist?
Ich bin mit Saxon 9. Dank
"Genau" ist hier kritisch. Die Antwort für Saxon-B-9.1 ist nicht das gleiche wie für Saxon-ER 9.4, zum Beispiel.
InformationsquelleAutor Zyga | 2012-10-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein, um Anruf-Instanz Methoden einer "äußeren Objekt" übergeben, die als parameter in der Weise, die Sie beschreiben. Wenn $object ist ein Objekt, und com.Paket.MyClass ist seine Klasse, und Sie möchten, rufen Sie die Methode getColor, die auf dieses Objekt, dann
(a) müssen Sie deklarieren einen namespace, wie xmlns:MyClass="java:com.Paket.MyClass"
(b) rufen Sie die Methode MyClass:getColor($Objekt)
Dieser Mechanismus für den Aufruf von Java bezeichnet in der sächsischen als "reflexive extension-Funktionen". Es ist nicht unterstützt in der sächsischen Home Edition. Sie müssen entweder die Sächsische Professional Edition, oder die alten open-source-Saxon-B Produkt. Es ist ein weiterer Mechanismus in der sächsischen-ER nannte "integrierte Erweiterung von Funktionen", erfordert aber etwas mehr Programmierung auf der Java-Seite zu erklären, dass die Typen der Argumente und Ergebnis.
Müssen Sie sich bewusst sein, dass mit reflexiven Erweiterung Funktionen, Saxon, macht am besten nur Vermutungen, wie die Zuordnung von Java-Typen auf die XPath-Typen, und es muss nicht immer tun, die Zuordnung in der Weise, die Sie wollen, vor allem bei der Verwendung von collection-Typen.
Versuchen Sie, vermeiden Sie die Verwendung von Methoden mit Nebenwirkungen, wie setter-Methoden. Es gibt keinen absolut zuverlässigen Weg, um in der sächsischen, solche Aufrufe ausgeführt werden in einer bestimmten Reihenfolge, und manchmal auch die Sächsische optimizer wird einen Weg finden, der die Organisation der Abfrage, die verhindert, dass die Herstellung der Aufruf an alle. Wenn Sie müssen, stellen solche Anrufe, behandeln Sie, als ob der Anruf waren wieder ein Ergebnis (wie eine leere Sequenz) und der Aufruf in der Weise, dass, wenn es ein Ergebnis zurückgeben, so wäre das Ergebnis erscheint in der stylesheet-Ausgabe.
InformationsquelleAutor Michael Kay
Dies ist gründlich erklärt hier:
http://www.saxonica.com/html/documentation/extensibility/functions/
Ein kurzes Beispiel:
, wenn angewandt, auf jedem XML-Dokument (nicht verwendet) erzeugt die gewünschte, richtige Ergebnis:
extension-element-prefixes="date"
zuxsl:stylesheet
so dass Sie nicht bekommen, diexmlns:date="java:java.util.Date"
in der Ausgabe.Während das extension-element-prefixes haben, dass die Wirkung, es ist das falsche Werkzeug für den job: das richtige Attribut zu verwenden ist exclude-result-prefixes.
InformationsquelleAutor Dimitre Novatchev
Ich habe dies vor langer Zeit mit Xalan. Zuerst müssen Sie den folgenden, um Ihre xslt (ich glaube nicht, dass Sie brauchen all die anderen Attribute, die Sie setzen)
und klicken Sie dann zum aufrufen der Methode, die Sie tun können,
Ich habe versucht zu tun, die mit Xalan, aber es sagt, 'Namespace-Präfix "test" ist schwarzarbeit.'
InformationsquelleAutor Augusto
Seine zu spät, ich bin Entsendung, sondern für jemand anders kann es hilfreich sein.
Können Sie leicht erreichen dies mit Hilfe von xalan Prozessor:
Schritt 1: schließen Sie die Xalan-Abhängigkeit oder die geeignete jar beteiligt
Schritt 2. Wählen Sie diesen Prozessor, während die Integration mit java
Schritt 3. In Ihrem xsl-geben Sie die Informationen in der stylesheet
Bitte beachten Sie, dass, sollten Sie diese Klasse mit der Statischen Methode, die Sie verwenden werden in der xslt -
Schritt 4 : verwenden Sie es in Ihrem xslt -
Kann es sein, Zeichenfolge oder Zahl..je nach Methode argument
Quelle: http://www.cafeconleche.org/books/xmljava/chapters/ch17s03.html
InformationsquelleAutor hiccup