我有一个字符串,可能包含'frontmatter'或'bodymatter',这两个中的一个,就像这样 “章身体” “frontmatter toc”
我需要'x-matter'子串,把它放在属性的其他地方。
我认为使用XPath表达式会很好:
<xsl:variable name="front" select="substring( document(concat(tokenize(@href, '\.')[1],'.xml'))//section/@epub:type, '{[a-z]*matter}')"/>
表达式的文档部分很好用,但子字符串函数是错误的方法,XPath / RegExpr表达式在XSLT中也不像这样。 我可能只需要一些XPath / RegExpr表达式。 我怎么能这样做?
答案 0 :(得分:2)
找到解决方案。 XSLT 2.0拥有的设施比我的眼睛要多:
<xsl:analyze-string select="document(concat(tokenize(@href, '\.')[1],'.xml'))//section/@epub:type" regex="([a-z]*)matter">
<xsl:matching-substring>
<xsl:attribute name="epub:type"><xsl:value-of select="regex-group(1)"/>matter</xsl:attribute>
</xsl:matching-substring>
</xsl:analyze-string>
优雅地完成了这个伎俩。 这也表明,短暂的午休时间和新鲜空气可以做些什么。