2009-09-03 4 views
5

У меня есть таблица стилей XSL, для которой мне нужно добавить некоторые пользовательские манипуляции с строкой, используя функцию xsl:. Но у меня возникли проблемы с попыткой определить, где разместить эту функцию в моем документе.Где я могу поместить функцию XSL в документ XSL?

Моей XSL упрощенные выглядит так,

<?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> 

И я хочу поставить в простой функции, скажем,

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

Но я не могу работать, где поставить функцию, когда я положите его под узел, я получаю сообщение об ошибке «xsl: function» не может быть дочерним элементом элемента «xsl: stylesheet»., и если я поставлю его под узел, то получаю аналогичную ошибку.

Куда следует поместить функцию? Idealy Я хотел бы поместить мои функции во внешний файл и импортировать их в свои файлы xsl.

ответ

18

В XSL версии 1.0 отсутствует функция xsl: function. Вы должны создать именованный шаблон

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

(...) 

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

Thanks Peirre! Это сделал трюк. – mattdlong

7

Вы можете обновить версию таблицы стилей до 2,0 Затем в объявлении таблицы стилей указать, как

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

** Ваш выбор Вы можете указать что-либо по вашему желанию то ниже это указать ваши функции

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

Затем в шаблоне вы можете использовать его в качестве

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

Выполнение именно того, что написано здесь, я получаю «пространство имен» http: //www.**.com «не содержит никаких функций». ошибка. В чем может быть проблема? – ALOToverflow

+1

Это потому, что MSXML не поддерживает XSLT 2. –