2016-05-09 8 views
1

Ich habe eine XSLT, in der ich eine Funktion definiert habe. Der Transformator sagt, dass jede Funktion ihren Namespace haben muss, also habe ich einen Dummy-Namespace im Kopf des XSLT deklariert, aber jetzt erscheint dieser Namespace auch im Root-Tag des Ausgangs! kann nicht erraten, wie dies zu vermeiden ...Namespace in xslt im Root-Tag platziert

Beispiel:

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> 

Es ist die xmlns:fn="http://function" im <root> Tag, das ich aus meiner Ausgabe entfernen möchte. Weiß nicht ob es eine Rolle spielt, aber ich benutze Saxon-HE-9.4.

+0

Wenn Sie möchten, dass Ihre Funktion den String-Wert zurückgibt, der durch Ihren 'replace'-Aufruf berechnet wurde, verwenden Sie' ' wie bei '

Antwort

3

Fügen Sie einfach <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://function" version="2.0" exclude-result-prefixes="fn"> hinzu. Beachten Sie außerdem, dass fn normalerweise für den Namespace der XPath-Funktion verwendet wird, sodass Sie möglicherweise ein anderes Präfix verwenden möchten, um Verwechslungen durch Benutzer Ihres Codes zu vermeiden.

Verwandte Themen