查找和分配子字符串

时间:2014-03-17 11:07:10

标签: xml regex xslt xpath xslt-2.0

我有一个字符串,可能包含'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表达式。 我怎么能这样做?

1 个答案:

答案 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>

优雅地完成了这个伎俩。 这也表明,短暂的午休时间和新鲜空气可以做些什么。