我有一个如下所示的XML行。
<title>I. DEFINITION</title>
这里我正在做什么在'。'之前获取值,这很好,但我想在'。'之后为内容应用模板。我不知道我该怎么做。我正在使用下面的XSLT线。
<xsl:apply-templates select="substring-after(.,'. ')"/>
当我使用它时,会抛出错误,它是
XSLT 2.0 Debugging Error: Error: file:///C:/Users/u0138039/Desktop/Proview/HK/ArchboldHK2014/XSLT/Chapters.xsl:508: Not a node item - item has type xs:string with value 'DEFINITION' - Details: - XTTE0520: The result of evaluating the 'select' attribute of the <xsl:apply-templates> instruction may only contain nodes
请告诉我如何在'。'
之后在内容上应用模板感谢。
答案 0 :(得分:2)
您可以尝试此模板
<xsl:template match="title">
<xsl:copy>
<label><xsl:value-of select="substring-before(., '. ')"/></label>
<caption>
<xsl:variable name="slicetext" select="substring-after(current()/text()[1], '. ')"/>
<xsl:value-of select="$slicetext"/><xsl:apply-templates select="text()[position() > 1]|child::node()[not(self::text())]"/>
</caption>
</xsl:copy>
</xsl:template>
答案 1 :(得分:0)
使用XSLT 1.0和2.0,您只能为节点编写和应用模板,而不能像字符串这样的原始值。我认为这在XSLT 3.0中有所改变。
在XSLT 2.0中,要进一步处理substring-result的结果,你需要编写一个函数或一个带有字符串参数的命名模板。
如果您真的想要应用模板,首先需要使用xsl:variable创建一个临时文本节点。