2016-05-09 5 views
1

У меня есть XSLT, в котором я определил функцию. Трансформатор говорит, что любая функция должна иметь свое пространство имен, поэтому я объявила пустое пространство имен в голове XSLT, но теперь это пространство имен появляется также в корневом теге вывода! не догадываешься, как избежать этого ...namespace в xslt, помещенном в корневой тег

Пример:

Input.xml

<something> 
    <mytag> test </mytag> 
</something> 

test.xsl

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://function" version="2.0" > 

    <xsl:output method="xml" indent="yes" /> 

    <xsl:function name="fn:trim" > 
    <xsl:param name="pStr"/> 
    <xsl:value-of select="replace($pStr,'^\s*(.+?)\s*$', '$1')"/> 
    </xsl:function> 

    <xsl:template match="something"> 
    <root><xsl:value-of select="fn:trim(mytag)" /></root> 
    </xsl:template> 
</xsl:stylesheet> 

out.xml

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns:fn="http://function">test</root> 

Это xmlns:fn="http://function" в теге <root>, который я хотел бы удалить из моего вывода. Не знаю, имеет ли это значение, но я использую Saxon-HE-9.4.

+0

На стороне примечания, если вы хотите, чтобы ваша функция возвращала значение строки, вычисленное вашим вызовом 'replace', затем используйте' ' как с '

ответ

3

Просто добавьте <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://function" version="2.0" exclude-result-prefixes="fn">. Также обратите внимание, что fn обычно используется для пространства имен функций XPath, поэтому вы можете использовать другой префикс, чтобы избежать путаницы со стороны любых пользователей вашего кода.