为什么我的html输出中有xmlns

时间:2013-11-06 00:58:02

标签: html xml xslt xpath

在来自XSLT进程的html输出文件中(使用saxon9he),出现了155次 xmlns:fn =“http://www.w3.org/2005/xpath-functions”插入各种tr元素

使用xpath函数的xsl部分是

<xsl:if test="(string(@hideIfHardwareIs)='') or (not(fn:matches(string($input_doc//inf[@id='5'), string(@hideIfHardwareIs), 'i')))">

除非我读错了,匹配需要3个参数,一个字符串,另一个字符串,然后是一个标志,在这种情况下,这是不区分大小写的。

我不明白的是,使用xmlns显示的tr元素并不接近于match()函数完成的部分或xsl。

我正在使用的XSL文件是2100行,它解析的XML文件是12800行。所以我认为我不能轻易分享。我继承了这个并且需要(此时)维护它。

我可以在XSL中找到什么东西,将xmlns插入到html输出中?

1 个答案:

答案 0 :(得分:3)

这些功能不需要加前缀。

xmlns:fn="http://www.w3.org/2005/xpath-functions"中删除xsl:stylesheet,然后从xpath函数中删除fn:前缀。

示例:

XML输入

<foo>test</foo>

XSLT 2.0#1

<xsl:stylesheet version="2.0" xmlns:fn="http://www.w3.org/2005/xpath-functions" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
        <xsl:if test="fn:matches(.,'^t')">
            <bar><xsl:value-of select="."/></bar>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

<强>输出

<bar xmlns:fn="http://www.w3.org/2005/xpath-functions">test</bar>

XSLT 2.0#2

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
        <xsl:if test="matches(.,'^t')">
            <bar><xsl:value-of select="."/></bar>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

<强>输出

<bar>test</bar>