Come passare un documento XML come parametro a una trasformazione XSL in Java (XDK oracle)?

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

  •  18-09-2019
  •  | 
  •  

Domanda

Sto cercando di passare un documento XML per un foglio di stile XSLT come parametro. Credo che il codice utilizza la XDK Oracle per le trasformazioni (che sta utilizzando JDK 1.4.2, e primavera, e io sono una novità per il codice di base, quindi non sono sicuro di quello che è sempre caricato alla fine). Nel mio primo tentativo, ho appena creato un oggetto documento e impostare questa come parametro sul trasformatore, ma i tentativi di copiare la variabile nella struttura danno alcun risultato. Le domande che vengono in mente sono:

  1. Questo è anche possibile nel caso generale di trasformatori XSLT? (Sembra come dovrebbe essere, come in genere le variabili XSLT / parametri possono contenere nodesets)

  2. è possibile specificamente con il XDK oracolo (o xalan, che è anche nel percorso classe)?

  3. Se è così, come faccio a farlo funzionare?

È stato utile?

Soluzione

La risposta è che questo è possibile, tuttavia, non è intuitivo, almeno per il processore XSL Oracle. Ho provato le seguenti invocazioni (non funzionante) (nomi cambiati per proteggere gli innocenti):

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

e

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

(questo secondo sulla base del fatto che forse DOMSource avrebbe funzionato perché era l'interfaccia java.xml.transform al DOM). L'invocazione che ha lavorato per me alla fine è stato quello di prendere l'intuizione che XSL utilizza XPath, e le tipologie valide per la variabile sono essenzialmente stringhe o nodesets, e XPath restituisce nodesets. Le seguenti opere per me:

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

che utilizza fondamentalmente XPath per ottenere una serie di nodi che contiene solo il documento radice del passato in oggetto DOM. Tuttavia, questo sembra un po 'di hack, e potrebbe non funzionare con altri processori XSL, in modo YMMV ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top