在来自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输出中?
答案 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>