Cómo pasar un documento XML como un parámetro a una transformación XSL en Java (Oracle XDK)?

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de pasar un documento XML a una hoja de estilo XSLT como parámetro. Creo que el código está utilizando el XDK oráculo para transformaciones (se trata de utilizar JDK 1.4.2, y la primavera, y yo soy nuevo en la base de código, así que no estoy seguro de lo que está siendo cargada en el extremo). En mi primer intento, acabo de crear un objeto de documento y establecerlo como el parámetro en el transformador, pero los intentos de copiar la variable en el árbol no dan resultado. Las preguntas que vienen a la mente son:

  1. Es esto posible en el caso general de los transformadores XSLT? (Parece que debe ser, como generalmente variables de XSLT / parámetros pueden contener nodesets)

  2. es posible específicamente con el XDK Oracle (o xalan, que también está en la ruta de clase)?

  3. Si es así, ¿cómo puedo hacer que funcione?

¿Fue útil?

Solución

La respuesta es que esto es posible, sin embargo, es no intuitivo, al menos por el procesador XSL Oracle. Probé las invocaciones (no laborables) siguientes (nombres cambiados para proteger a los inocentes):

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

y

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

(este segundo sobre la base de que tal vez DOMSource funcionaría porque era la interfaz java.xml.transform al DOM). La invocación que trabajó para mí en el final iba a tener la idea de que XSL utiliza XPath, y los tipos válidos para las variables son esencialmente cadenas o nodesets, y XPath devuelve nodesets. Las siguientes obras para mí:

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

Lo que básicamente utiliza XPath para obtener un conjunto de nodos que contiene sólo el documento raíz de la aprobada en objeto DOM. Sin embargo, esto parece un poco de un truco, y podría no funcionar con otros procesadores XSL, por lo que tu caso es distinto ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top