Xml xslt中放置在根标记中的命名空间

Xml xslt中放置在根标记中的命名空间,xml,xslt,xslt-2.0,xml-namespaces,saxon,Xml,Xslt,Xslt 2.0,Xml Namespaces,Saxon,我有一个XSLT,其中定义了一个函数。 转换器说任何函数都必须有它的名称空间,所以我在XSLT的头部声明了一个虚拟名称空间,但是现在这个名称空间也出现在输出的根标记中! 我猜不出怎么避免这个 例如: input.xml <something> <mytag> test </mytag> </something> 试验 test.xsl <?xml version="1.0"?> <xsl:stylesheet xm

我有一个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>

测试
这是
xmlns:fn=”http://function“
在我要从输出中删除的
标记中。
不知道这是否重要,但我使用的是Saxon-HE-9.4。

只需添加
。另请注意,
fn
通常用于XPath函数名称空间,因此您可能希望使用不同的前缀,以避免代码的任何用户造成混淆。

在旁注中,如果您希望函数返回由
replace
调用计算的字符串值,请使用