2013-03-06 26 views
6

Tôi muốn tạo một JSP bằng cách sử dụng thẻ XSLT và <x:transform>. Nhưng tôi không có tệp XML trên hệ thống tệp của mình và tôi không thể nhập tệp đó như: <c:import url="./xml/MyXml.xml" var="xmldoc"/>. Nó được tạo động trong mã Java và được đặt làm Chuỗi để yêu cầu thuộc tính. tôi cố gắng làm điều đó như thế này:Tôi có thể tạo một JSP từ XML được tạo động không?

<div id="mydiv"> 
    <c:set var="xmldoc"> 
     <c:out value="${requestScope.someXmlString}"/> 
    </c:set> 
    <c:import url="./xsl/MyStylesheet.xsl" var="xsltdoc"/> 
    <x:transform xml="${xmldoc}" xslt="${xsltdoc}"/> 
</div> 

hoặc

<div id="mydiv"> 
    <c:set var="xmldoc" value="${requestScope.someXmlString}">   
    <c:import url="./xsl/MyStylesheet.xsl" var="xsltdoc"/> 
    <x:transform xml="${xmldoc}" xslt="${xsltdoc}"/> 
</div> 

Nhưng nó không làm việc. Có vẻ như <x:transform> chỉ mong đợi một tài liệu xml (không phải là một chuỗi). Tôi làm nó như thế nào? Hay có cách nào khác để làm điều này?

+1

Theo [this] (http://www.tutorialspoint.com/jsp/jstl_xml_transform_tag.htm) nó được cho là đang hoạt động. Tôi tin rằng, vấn đề đó là trong chỉ thị 'c: import'. Chỉ cho mục đích thử nghiệm cố gắng sử dụng URL tuyệt đối (fe 'http: // localhost: 8080/myapp/xsl/MyStylesheet.xsl'), và nếu nó hoạt động, thì bạn có thể thử chơi với' $ {pageContext.servletContext.servletContextName } 'hoặc một cái gì đó như thế này. – n1ckolas

+0

Cảm ơn. Nhưng tôi đã thử kiểm tra nó như ' '. Va no đa hoạt động. Tôi nghĩ lý do không phải là 'c: import'. Nhưng tôi sẽ cố gắng chơi con đường whisky hơn. – user2140493

+0

Đó là những gì tôi đang nói: thay vì '' hãy thử sử dụng '' và xem điều gì xảy ra. – n1ckolas

Trả lời

0

Bạn không cần thử và đặt giá trị bạn có thể trực tiếp tham chiếu giá trị yêu cầu trong thẻ <x:transform> của bạn.

<x:transform xml="${requestScope.someXmlString}" xslt="${xsltdoc}"/> 

Theo mặc định jstl sử dụng phạm vi yêu cầu. Vì vậy, nếu bạn đặt giá trị như request.setAttribute ("someXmlString", xmlStr); sau đó bạn có thể gọi trực tiếp

<x:transform xml="${someXmlString}" xslt="${xsltdoc}"/> 

Cả hai đều hoạt động.

Các vấn đề liên quan