2011-12-23 2 views
10

Tôi đang làm việc trên một trang web cũ sử dụng java và xsl. Làm thế nào tôi có thể inculde một tập lệnh trong một tập tin xsl? Top of the file:cách bao gồm thẻ tập lệnh trong tệp xsl?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:include href="shipmentPackageInfo.xsl"/> 

<script src="/fs/scripts/shipment/shipment.js"></script> 

phá vỡ các ứng dụng

- CẬP NHẬT -

Có một tập tin gọi là pageHeader.xsl trong đó có tất cả các thẻ script bên trong

<xsl:output method="html"/> 
    <xsl:template match="PageHeaderData"> 

Trả lời

9

Dường như có một giải pháp ở đây:

http://www.webdeveloper.com/forum/archive/index.php/t-20815.html

Đặt mã javascript giữa <xsl:text> tag một cái gì đó như dưới đây

<script type="text/javascript"> 

<xsl:text> 

javascript here 

</xsl:text> 

</script> 
+0

đơn giản và hữu ích, thêm một dấu ngoặc kép vào cuối type = "text/javascript –

+0

@contam Có lẽ bạn nên gợi ý rằng cho thành viên diễn đàn đã đăng bài này, vì đây là trích dẫn trực tiếp từ họ;) – annonymously

+0

bạn nói đúng ... Tôi cần điều tra xem mã nguồn của diễn đàn có được dán từ một diễn đàn khác không :-) –

2

bạn phải chèn thẻ script trong một mẫu khối hoặc nó sẽ phá vỡ ...

tức

<xsl:template match="/"> 
    <script src="/fs/scripts/shipment/shipment.js"></script> 
</xsl:template> 
+0

Cảm ơn Treemonkey. Tôi đã thử giải pháp của bạn nhưng nó vẫn còn eaks. Tôi có cần phải có kịch bản bên trong không? Tuy nhiên, bạn chỉ có thể có một phương thức đầu ra cho mỗi trang? –

+0

Vì vậy, tôi đoán tôi có thể thêm tập lệnh vào tệp trangHeader chính và bọc nó trong một kết hợp sao cho tập lệnh chỉ tải khi kết hợp phù hợp? –

0

CHỈNH SỬA

Cô ấy e là giải pháp hoạt động

Giả sử đây là xsl của bạn và bạn bao gồm xsl như bạn đã đề cập. Trong trường hợp này tôi gọi nó là include.xsl. Tôi chỉ gọi một mẫu được gọi là tiêu đề mà ống ra tham chiếu javascript.

chính XSLT File:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
    <xsl:include href="include.xsl"/> 

    <xsl:template match="/"> 
     <xsl:call-template name="headers"/> 
     <bar> 
      <xsl:value-of select="root"/> 
     </bar> 
    </xsl:template> 
</xsl:stylesheet> 

include.xsl

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
    <xsl:template name="headers"> 
     <script src="/fs/scripts/shipment/shipment.js"></script> 
    </xsl:template> 
</xsl:stylesheet> 

Output:

<?xml version="1.0" encoding="utf-8"?> 
<script src="/fs/scripts/shipment/shipment.js"/> 
<bar>foo</bar> 
+0

Cảm ơn. Điều đó chỉ cần in ra như một chuỗi trên màn hình –

+0

Đã chỉnh sửa và một mã khác, tôi đã thử nghiệm điều này và nó hoạt động. Về cơ bản bạn chỉ có thể gọi một mẫu có một hoặc một tập hợp các javascripts –

+1

Sử dụng CDATA, tôi đã thử nghiệm điều này, bạn cũng có thể thực hiện ']]> 'điều này sẽ xuất nó ra tệp –

8

Hãy nhìn vào câu trả lời của tôi để XSLT wont allow me to use self-closing img and br tags

thẻ script tự đóng (<script src="code.js"/>) có thể khiến các tệp JavaScript không tải, vì vậy bên trong XSLT của bạn, bạn có thể cần phải có một số văn bản bên trong thẻ tập lệnh để giữ cho nó không tự đóng và làm cho nó hoạt động.

<script src="code.js>//</script> 
0
<script type="text/javascript" src="/Scripts/script.js"> 
    <xsl:comment>script</xsl:comment> 
</script> 
5

Ồ, tôi làm như thế này:

... ... 
     </body> 
<script language="javascript"><![CDATA[ 
var a_patch = function(){ 
    var links = document.getElementsByTagName("a"); 
    for (var i=0; i<links.length; i++){ 
     var link = links[i]; 
     var text = link.innerHTML; 
     ... ... 
    } 
}; 
a_patch(); 
]]></script> 
</html>