Прошу прощения за простейший вопрос. У меня есть файл XML, а также XSL для перевода его в другой формат (KML). В KML я хочу добавить динамический атрибут, который не присутствует в исходном документе XML. Я хочу создать узел, подобный следующему:
<NetworkLinkControl>
<message>This is a pop-up message. You will only see this once</message>
<cookie>sessionID={@sessionID}</cookie>
<minRefreshPeriod>5</minRefreshPeriod>
</NetworkLinkControl>
В частности, я хочу, чтобы текст {@sessionID}
был заменен динамическим значением, которое я каким-либо образом вставляю в шаблон (т.е. НЕ является частью исходного XML-документа, который преобразует XSLT).
Вот код, который я использую для маршалинга KML:
DomainObject myObject = ...;
JAXBContext context = JAXBContext.newInstance(new Class[]{DomainObject.class});
Marshaller xmlMarshaller = context.createMarshaller();
xmlMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
TransformerFactory transFact = TransformerFactory.newInstance();
// converts from jaxb XML representation into KML
Templates displayTemplate = transFact.newTemplates(new StreamSource(new File("conf/jaxbkml.xsl")));
Result outputResult = new StreamResult(System.out);
TransformerHandler handler =
((SAXTransformerFactory) transFact).newTransformerHandler(displayTemplate);
handler.setResult(outputResult);
Transformer transformer = handler.getTransformer();
// TODO: what do I actually fill in here to ensure that the session ID comes through
// in the XSLT document? I can't make heads or tails of the javadocs
transformer.setOutputProperty("{http://xyz.foo.com/yada/baz.html}sessionID", "asdf");
xmlMarshaller.marshal(myObject, handler);
Я понял, что есть способ динамически подставлять значения в XSLT с помощью шаблонов значений атрибутов , и я предполагаю, что есть способ подключить свойства преобразователя к используется с этими шаблонами значений атрибутов, но я не совсем понимаю, как это делается. Может ли кто-то пролить свет? Спасибо.