Comment passer un document XML en tant que paramètre à une transformation XSL en Java (oracle xdk)?

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

  •  18-09-2019
  •  | 
  •  

Question

Je suis en train de passer d'un document XML à une feuille de style XSLT comme paramètre. Je crois que le code utilise l'oracle XDK pour les transformations (il utilise JDK 1.4.2, et au printemps, et je suis de nouveau à la base de code, donc je ne suis pas sûr de ce qui se charge à la fin). Dans ma première tentative, je viens de créer un objet de document et le fixer comme paramètre sur le transformateur, mais les tentatives de copier la variable dans l'arbre donne aucun résultat. Les questions qui viennent à l'esprit sont:

  1. est-ce possible dans le cas général des transformateurs XSLT? (Il semble que cela devrait être, comme généralement les variables XSLT / paramètres peuvent contenir nodesets)

  2. il est possible en particulier avec l'oracle XDK (ou xalan, qui est aussi dans le chemin de classe)?

  3. Si oui, comment puis-je le faire fonctionner?

Était-ce utile?

La solution

La réponse est que cela est possible, cependant, il est non-intuitive, au moins pour le processeur XSL Oracle. J'ai essayé les suivantes (invocations non-travail) (noms changés pour protéger les innocents):

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

et

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

(ce second sur la base que peut-être DOMSource fonctionnerait parce qu'il était l'interface java.xml.transform au DOM). L'invocation qui a fonctionné pour moi à la fin était de prendre l'idée que XSL utilise XPath et les types valides pour la variable sont essentiellement des chaînes ou des nodesets, et XPath retourne nodesets. Les travaux suivants pour moi:

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

qui utilise essentiellement XPath pour obtenir un nodeset ne contenant que le document racine du passé dans l'objet DOM. Cependant, cela semble un peu un hack, et peut ne pas fonctionner avec d'autres processeurs XSL, donc ... YMMV

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top