2009-09-03 34 views
5

Tôi có một biểu định kiểu XSL mà tôi cần thêm một số thao tác chuỗi tùy chỉnh bằng cách sử dụng hàm xsl:. Nhưng tôi đang gặp khó khăn khi cố gắng tìm ra nơi để đặt hàm vào tài liệu của tôi.Tôi đặt hàm XSL ở đâu trong tài liệu XSL?

My XSL vẻ đơn giản như thế này,

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:my="myFunctions" xmlns:d7p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:import href="Master.xslt"/> 
    <xsl:template match="/"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <!-- starts actual layout --> 
     <fo:page-sequence master-reference="first"> 
     <fo:flow flow-name="xsl-region-body"> 
      <!-- this defines a title level 1--> 
      <fo:block xsl:use-attribute-sets="heading"> 
      HelloWorld 
      </fo:block> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

Và tôi muốn đặt trong một chức năng đơn giản, chẳng hạn,

<xsl:function name="my:helloWorld"> 
    <xsl:text>Hello World!</xsl:text> 
    </xsl:function> 

Nhưng tôi không thể làm việc ra nơi để đặt các chức năng, khi tôi đặt nó dưới nút tôi nhận được một lỗi nói rằng 'xsl: function' không thể là con của phần tử 'xsl: stylesheet'., và nếu tôi đặt nó dưới nút tôi nhận được một lỗi tương tự.

Tôi nên đặt chức năng ở đâu? Ý tưởng tôi muốn đặt các chức năng của tôi vào một tệp bên ngoài và nhập chúng vào các tệp xsl của tôi.

Trả lời

18

Không có hàm xsl: trong phiên bản XSL 1.0. Bạn phải tạo một mẫu tên

<xsl:template name="helloWorld"> 
    <xsl:text>Hello World!</xsl:text> 
</xsl:template> 

(...) 

<xsl:template match="something"> 
    <xsl:call-template name="helloWorld"/> 
</xsl:template> 
+0

Cảm ơn Peirre! Điều đó đã làm các trick. – mattdlong

7

Bạn có thể nâng cấp lên phiên bản stylesheet đến 2,0 Sau đó, trong tuyên bố stylesheet định như

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:func="http://www.**.com"> 

** Lựa chọn của bạn, bạn có thể chỉ định bất cứ điều gì như mong muốn của bạn sau đó bên dưới điều này chỉ định chức năng của bạn

<xsl:function name="func:helloWorld"> 
    <xsl:text>Hello World!</xsl:text> 
</xsl:function> 

Sau đó, trong mẫu bạn có thể sử dụng nó làm

<xsl:template match="/"> 
<xsl:value-of select="func:helloWorld"/> 
</xsl:template> 
+1

Làm chính xác những gì được viết ở đây, tôi nhận được một "Không gian tên" http: //www.**.com 'không chứa bất kỳ chức năng nào.' Có thể vấn đề là gì? – ALOToverflow

+1

đó là vì MSXML không hỗ trợ XSLT 2. –