Como passar um documento XML como um parâmetro para um XSL transformar em java (XDK Oracle)?

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu estou tentando passar um documento XML para uma folha de estilo XSLT como um parâmetro. Eu acredito que o código está usando o XDK oráculo para as transformações (ele está usando JDK 1.4.2 e Primavera, e eu sou novo para a base de código, então eu não tenho certeza do que está sendo carregado no final). Na minha primeira tentativa, Acabei de criar um objeto de documento e definir isso como o parâmetro no transformador, mas as tentativas para copiar a variável na árvore não dão resultado. Questões que vêm à mente são:

  1. isso é mesmo possível no caso geral de transformadores XSLT? (Parece que ele deve ser, como geralmente XSLT variáveis ??/ parâmetros podem conter nodesets)

  2. é possível especificamente com o XDK Oracle (ou xalan, que também está no caminho da classe)?

  3. Se sim, como posso fazê-lo funcionar?

Foi útil?

Solução

A resposta é que isso é possível, no entanto, é não-intuitivo, pelo menos para o processador do Oracle XSL. Eu tentei as seguintes invocações (não-trabalho) (nomes alterados para proteger os inocentes):

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

e

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

(esta segunda na base de que talvez DOMSource iria funcionar porque era a interface java.xml.transform ao DOM). A invocação que funcionou para mim no final foi a tomar a percepção de que XSL usa XPath, e os tipos válidos para a variável são essencialmente cordas ou nodesets e XPath retorna nodesets. Os seguintes trabalhos para mim:

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

O que basicamente usa XPath para obter um conjunto de nós contendo apenas o documento raiz do passado no DOM objeto. No entanto, este parece ser um pouco de um truque, e pode não funcionar com outros processadores de XSL, então YMMV ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top