2009-02-10 16 views
8

Về cơ bản, tôi muốn có một xslt để trở thành xslt 'cơ sở' của tôi và muốn liên kết điều này với các tệp xslt con.Tôi có thể liên kết xslt với một xslt khác không?

Điều này có khả thi không?

Mục đích là để giảm trùng lặp mã.

Chúng tôi sẽ có nhiều tệp xslt con cho tất cả khách hàng khác nhau với định dạng và văn bản bổ sung của riêng họ và không muốn lặp lại mã cơ sở cho mỗi xslt của khách hàng.

Tôi biết chúng tôi có thể định dạng dựa trên loại khách hàng nhưng điều này sẽ làm cho xslt lộn xộn. Lý tưởng giống như mã khách hàng có liên quan cho từng khách hàng.

Đây không phải là cách để thực hiện xslt? Tôi mới dùng xslt!

Trả lời

14
<xsl:import href="library/utility-include.xsl" /> 

Đường dẫn href liên quan đến tệp xsl hiện tại. <xsl:import/> documentation.

Hãy nhớ rằng bạn phải viết các dòng nhập của mình làm phần tử con đầu tiên của <xsl:stylesheet> hoặc <xsl:transform>. Chúng không thể xuất hiện trong các tệp của bạn.

10

Như tất cả các câu trả lời khác đã xác định, có hai hướng dẫn XSLT:

<xsl:import>

<xsl:include>

được thiết kế chính xác để cung cấp khả năng này .

Có thể bạn quan tâm rằng có đầy đủ thư viện mẫu và chức năng nhập nội bộ các bảng định kiểu khác của thư viện. Các bảng định kiểu của thư viện được dự định sẽ được nhập vào các bảng định kiểu XSLT của người dùng.

Ví dụ: hãy xem FXSL library để lập trình chức năng trong XSLT.

4

Tất cả các câu trả lời khác cung cấp cho bạn đầy đủ thông tin,
tôi muốn đề cập đến một điều nữa quan trọng ở đây .. Bạn thậm chí có thể "vượt qua (trong cả hai cách) các thông số" giữa các tập tin hai (gọi và gọi, nếu họ cần chia sẻ bất kỳ dữ liệu nào) tệp xslt ..
Tính năng này Đóng vai trò quan trọng trong/ngoài XSLT phiên bản 1.0, bạn có thể cần nó trong tương lai ..
:)

0

Có, bạn có thể sử dụng thẻ để kéo trong một XSLT khác nhau:

<xsl:include href="OtherTemplate.xslt" /> 

Có một vài gotchas! Vì vậy, hãy cẩn thận!

XSLT "mẹ" sẽ lưu vào bộ nhớ cache XSLT được bao gồm. Vì vậy, nếu bạn thực hiện một thay đổi cho XSLT lồng nhau/bao gồm - nó sẽ không hiển thị ngay lập tức trong phép chuyển đổi XSLT cha mẹ. Tôi "nghĩ" điều này có thể liên quan đến việc sử dụng XslCompiledTransform - nhưng không phải là 100% trên đó. Dù sao, nếu bạn sửa đổi XSLT cha mẹ, nó sẽ làm mới bộ nhớ cache. (Đây là một vấn đề rất khó chịu đối với một số dự án)

Thứ hai, bạn có thể gặp phải vấn đề với tham số $ currentPage. Nó chỉ có thể được khai báo một lần trong toàn bộ biểu định kiểu XSLT - bao gồm bất kỳ "bao gồm" nào! Vì vậy, chỉ cần cẩn thận nơi bạn tham khảo các yếu tố! tham chiếu từ here