2012-05-08 3 views
0

Я создаю xsl для объединения двух xml в один, а затем с помощью вывода в другой xsl для представления html. Когда я использую xmlSpy для его проверки, он работает очень хорошо. Я помещаю их в веб-приложение java, что-то не так. XSL выглядит следующим образомприменить xsl для объединения двух xml-файлов в jsp

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" encoding="UTF-8" /> 
    <xsl:strip-space elements="*" /> 
    <xsl:variable name="xsdresult" select="document('xsdResult.xml')" /> 
    <xsl:variable name="schresult" select="document('result.xml')" /> 
    <xsl:template match="/"> 
    <xsl:result-document href="fullresult.xml" method="xml"> 
     <fullresult> 
      <xsl:copy-of select="$schresult/node()" /> 
      <xsl:copy-of select="$xsdresult/node()" />  
     </fullresult> 
    </xsl:result-document> 
    </xsl:template> 
</xsl:stylesheet> 

и этот файл и XML-файлы, все под тем же directory.and выходной файл является тем же самым. JSP применять этот XSLT

 <?xml version="1.0" encoding="UTF-8" ?> 
    <%@ page language="java" contentType="text/html; charset=UTF-8" 
     pageEncoding="UTF-8"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <%@taglib uri="http://jakarta.apache.org/taglibs/xsl-1.0" prefix="xsl"%> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 

    <%@ page%> 

    <title>test</title> 
    </head> 

    <body> 
    <p> 
    <xsl:apply xml="WEB-INF/classes/result/result.xml" xsl="WEB-INF/classes/result/merge.xsl" /> 
<xsl:apply xml="WEB-INF/classes/result/xsdResult.xml" xsl="WEB-INF/classes/result/merge.xsl" /> 
<xsl:apply xml="WEB-INF/classes/result/fullresult.xml" xsl="WEB-INF/classes/result/anotherone.xsl" /> 
    </p> 
    </body> 
    </html> 

проблема в merge.xsl, документ ('xsdResult.xml') и документ ('result.xml'), они всегда ищут под eclipse_home каталога, а не котировка webapps tomcat.

+0

У вас есть вопросы? Что это? –

+0

проблема заключается в файле merge.xsl, document ('xsdResult.xml') и документе ('result.xml'), они всегда ищут в каталоге eclipse_home, а не в tomcat webapps direcotry. –

+0

Да, но это заявление - не вопрос. Кроме того, вы можете просто листать файлы там, где они ожидаются - так что это даже не проблема. –

ответ

0

Что вам нужно, это URI Resolver. Глядя на what happens inside the ApplyTag Я не вижу, как вы сможете предоставить свои собственные.

Возможно, есть еще один теглик Apache для подобных вещей - xtags. StyleTag там, кажется, лучше работает по сравнению с ApplyTag, его - с использованием ресивера URI (см. line 154). Тем не менее, я не вижу чистого способа передать свои права без подкласса от него. Вы можете проследить код далее в URLHelper и посмотреть, будет ли изменение URI в функции document() чем-то вроде /WEB-INF/..., что даст лучшие результаты.

Тем не менее, вы, скорее всего, столкнетесь с другой проблемой со вторым шагом вашей трансформации, где вы ожидаете получить результат первого прохода из файловой системы. Где будет первый провал сбросить fullresult.xml? выполняет ли процесс, на котором работает сервер приложений от имени, есть разрешения на запись в файловую систему? Вы даже хотите, чтобы он записывался в файловую систему?

Я чувствую, что вам будет намного лучше собрать небольшой класс утилиты в простой Java, который будет транслировать ваши преобразования с использованием JAXP API. У вас будет весь контроль над функциями парсера, включая разрешение URI, и вам не нужно будет использовать файловую систему в качестве промежуточного хранилища. И когда вы это сделаете, вы также можете рассмотреть возможность выполнения своей трансформации за один проход. Вы можете объединить свои документы в xsl:variable, а затем применить к ним шаблоны или просто применить шаблоны к результату каждой функции document() по отдельности. Если, конечно, вам не нужно сохранять результат слияния XML.

Надеюсь, это поможет

+0

есть ли какой-нибудь пример, который добавляет xml-файл в другой, используя jaxp api? –

+0

, предполагая, что ваши XML-файлы небольшие, и вы не используете тысячи из них параллельно (так что вы не слишком беспокоитесь об использовании памяти), вы можете просто использовать DOM API (вот один учебник, но вы можете найти больше, если вы google для JAXP: http://java.sun.com/webservices/reference/tutorials/jaxp/html/dom.html).Вы либо создадите новый документ, создаете корневой узел, а затем добавите другие два в качестве дочерних узлов или измените одно из них, добавив содержимое другого. Я действительно предлагал вам сохранить XSLT и просто переместить логику из JSP в класс Java. имеет смысл? –

+0

Что вы подразумеваете под управлением xslt? –

Смежные вопросы