Динамическое создание XML в Java - PullRequest
5 голосов
/ 29 июля 2011

Я пытаюсь динамически создать файл XML в Java для отображения расписания. Я создал DTD для своего файла XML, и у меня есть файл XSL, который я хотел бы использовать для преобразования XML. Я не знаю точно, как продолжить.

До сих пор я пытался с помощью кнопки onClick какой-либо кнопки вызвать сервлет, который генерирует строку содержимого файла XML (вставляя динамические части XML в строку. Теперь у меня есть строка, содержащая содержимое XML-файла. Теперь я хотел бы преобразовать XML-файл, используя файл XSL, который имеется на моем сервере, и отобразить результат на странице, которая называется Servlet (это делается через AJAX).

Я не уверен, что я нахожусь в этом направлении, возможно, мне даже не следует создавать XML-код в виде строки с самого начала. Итак, мой вопрос, как мне продолжить отсюда? Как преобразовать строку XML, используя файл XSL, и отправить ее в ответ на вызов AJAX, чтобы я мог внедрить сгенерированный код в страницу? Или, если это не способ сделать это, как мне создать динамический файл XML другим способом и получить тот же результат?

Ответы [ 3 ]

5 голосов
/ 29 июля 2011

Вы можете использовать для этого JAXP .Это часть стандартного API Java SE.

StringReader xmlInput = new StringReader(xmlStringWhichYouHaveCreated);
InputStream xslInput = getServletContext().getResourceAsStream("file.xsl"); // Or wherever it is. As long as you've it as an InputStream, it's fine.

Source xmlSource = new StreamSource(xmlInput);
Source xslSource = new StreamSource(xslInput);
Result xmlResult = new StreamResult(response.getOutputStream()); // XML result will be written to HTTP response.

Transformer transformer = TransformerFactory.newInstance().newTransformer(xslSource);
transformer.transform(xmlSource, xmlResult);
1 голос
/ 29 июля 2011

В зависимости от того, насколько сложным и большим будет ваш XML, я бы предложил два варианта. Для небольших простых структур подойдет реализация DOM в Java ( Document ).

Если ваш XML более сложный, я бы посмотрел на JAXB . Преимущество заключается в том, что есть инструменты, которые автоматически создают классы Java из схемы XML (XSD). Таким образом, вам сначала нужно преобразовать DTD в XSD, но это не должно быть проблемой. В итоге вы получаете простые объекты передачи данных (простые объекты с получателями / установщиками для значений соответствующих элементов XML), и анализ / кодирование плюс правильная настройка пространств имен сделаны для вас. Это довольно удобно, но также может быть немного излишним для простых XML-структур.

В обоих случаях у вас получится экземпляр Document, который вы сможете окончательно преобразовать, используя JAXP .

0 голосов
/ 29 июля 2011

Apache XMLBeans - это хорошее решение для сериализации в и из XML.Вот что вам нужно сделать:

  • Загрузить XMLBeans из http://www.apache.org/dyn/closer.cgi/xmlbeans/binaries
  • Использовать исполняемый файл XMLBeans inst2xsd (в bin dir0 для преобразования вашего DTD в XSD
  • Используйте задачу ANT XMLBeans для преобразования XSD в классы, которые вы можете использовать в своем приложении

Вот пример сценария ANT для использования XMLBeans для создания классов:

<project name="my_project" basedir="..">
<property name="my_project.project.path" value="${basedir}"/>
<property name="xbean.dir" value="C:/lib/xmlbeans-2.2.0/lib" />
<path id="classpath">
    <fileset dir="${xbean.dir}" includes="**/*.jar" />  
</path> 
<taskdef name="xmlbean" classname="org.apache.xmlbeans.impl.tool.XMLBean" classpathref="classpath" />
<xmlbean schema="${testing_project.project.path}/my.xsd" srcgendir="${my_project.project.path}/src-tms-template-filter-fields" classgendir="${my_project.project.path}/bin">
    <classpath><path refid="classpath" /></classpath>
</xmlbean>

Теперь у вас есть хорошие классы Java, которые вы можете использовать для чистого кода для создания XML из данных, хранящихся в вашей БД. Используйте ответ BalusC для XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...