2016-05-09 4 views
1

私は関数を定義したXSLTを持っています。 トランスフォーマーには名前空間が必要なので、XSLTの先頭にダミーの名前空間を宣言しましたが、この名前空間は出力のルートタグにも表示されます。 は...これを回避する方法を推測することはできません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> 

出力から削除したい<root>タグのxmlns:fn="http://function" 重要かどうかは分かりませんが、私は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">を単に追加してください。また、通常はXPath関数の名前空間にはfnが使用されるため、コードの任意のユーザーによる混乱を避けるために別の接頭辞を使用することもできます。

関連する問題