2010-01-04 7 views
1

J'essaie de passer un document XML à une feuille de style XSLT en tant que paramètre. Je crois que le code utilise l'oracle XDK pour les transformations (il utilise JDK 1.4.2, et Spring, et je suis nouveau dans la base de code, donc je ne suis pas sûr de ce qui est chargé à la fin). Dans ma première tentative, je viens de créer un objet document et de le définir comme paramètre sur le transformateur, mais les tentatives de copier la variable dans l'arborescence ne donnent aucun résultat. Les questions qui viennent à l'esprit sont:Comment passer un document XML en tant que paramètre à une transformation XSL dans Java (oracle xdk)?

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

  2. est-ce possible avec l'oracle XDK (ou xalan, qui est aussi dans le classpath)?

  3. Si oui, comment le faire fonctionner?

Répondre

0

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 DOMSource serait peut-être travailler parce qu'il était le java Interface .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 ensembles de nœuds, et XPath renvoie des ensembles de nœuds. 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 ...

Questions connexes