我已经浏览了几个示例,并尝试修改搜索以了解什么是什么。
输入:
<Description>Ottelu pelattu 22.4.2018. Gagarin Cupin 5. finaaliottelu. Selostus: Antti Mäkinen.</Description>
<Description>Ottelu pelattu 20.4.2018. Gagarin Cupin 1. finaaliottelu. Selostus: Antti Mäkinen.</Description>
<Description>Ottelu pelattu 22.4.2018. Gagarin Cupin 2. puolivälierä. Selostus: Antti Mäkinen.</Description>`
我想做的就是在我的输出中选择这些:
中间没有圆点。
我可以使用substring-before / after,但是我知道使用正则表达式会很有用?
我已经做到了,可以满足我的需要:Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*
但是现在如何在XSLT中使用它?我应该使用analyze-string()
吗?或以某种方式matches()
?
XSLT:
<xsl:variable name="episode" select="Description"/>
<xsl:variable name="fetchcup">
<xsl:analyze-string select="$episode" regex="Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
<Cup><xsl:value-of select="$fetchcup"/></Cup>
但是说实话,尽管浏览了教程页面和示例,但我仍然感觉缺少一些工作原理的基础知识。如果我踏进门,可以进一步应用。
答案 0 :(得分:2)
您的正则表达式在Description
内的单个xsl:matching-substring
元素的上下文中工作,如果要输出匹配的字符串,则可以简单地将.
用于上下文项或regex-group(0)
(请参阅https://www.w3.org/TR/xslt-30/#func-regex-group)。在您的情况下,regex-group(1)
的使用没有意义,因为您的正则表达式没有任何子表达式。
<xsl:template match="Description">
<cup>
<xsl:analyze-string select="." regex="Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*">
<xsl:matching-substring>
<xsl:value-of select="."/>
</xsl:matching-substring>
</xsl:analyze-string>
</cup>
</xsl:template>
https://xsltfiddle.liberty-development.net/nc4NzQH中的模板输出
<cup>Gagarin Cupin 5. finaaliottelu</cup>
<cup>Gagarin Cupin 1. finaaliottelu</cup>
<cup>Gagarin Cupin 2. puolivälierä</cup>
对于您的三个Description
元素,希望我能正确理解这作为所需的输出。