Как передать XML-документ в качестве параметра преобразованию XSL в java (oracle xdk)?

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

  •  18-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь передать XML-документ в таблицу стилей XSLT в качестве параметра.Я полагаю, что код использует oracle XDK для преобразований (он использует JDK 1.4.2 и Spring, и я новичок в кодовой базе, поэтому я не уверен, что загружается в конце).В моей первой попытке я просто создал объект document и установил это в качестве параметра в transformer, но попытки скопировать переменную в дерево не дают результата.Вопросы , которые приходят на ум, следующие:

  1. возможно ли это вообще в общем случае XSLT-трансформаторов?(похоже, так и должно быть, поскольку обычно переменные / параметры XSLT могут содержать наборы узлов)

  2. возможно ли это конкретно с oracle XDK (или xalan, который также находится в classpath)?

  3. Если да, то как мне заставить это работать?

Это было полезно?

Решение

Ответ заключается в том, что это возможно, однако это неинтуитивно, по крайней мере, для процессора Oracle XSL.Я попробовал следующие (нерабочие) вызовы (имена изменены, чтобы защитить невинных):

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

и

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

(на этот раз на том основании, что, возможно, DOMSource сработал бы, потому что это был интерфейс java.xml.transform для DOM).Вызов, который в конце концов сработал для меня, заключался в том, чтобы понять, что XSL использует XPath, а допустимые типы для переменной по сути являются строками или наборами узлов, а XPath возвращает наборы узлов.Для меня работает следующее:

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

Который в основном использует XPath для получения набора узлов, содержащего только корневой документ переданного в DOM объекта.Однако это похоже на небольшой взлом и может не работать с другими процессорами XSL, поэтому YMMV...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top