xslt 中的命名空间放置在根标记中
namespace in xslt placed in root tag
我有一个 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*$', '')"/>
</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。
只需添加 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://function" version="2.0" exclude-result-prefixes="fn">
。另请注意,fn
通常用于 XPath 函数命名空间,因此您可能希望使用不同的前缀以避免代码的任何用户混淆。
我有一个 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*$', '')"/>
</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。
只需添加 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://function" version="2.0" exclude-result-prefixes="fn">
。另请注意,fn
通常用于 XPath 函数命名空间,因此您可能希望使用不同的前缀以避免代码的任何用户混淆。