正如here中所建议的,似乎可以在<xsl:non-matching-substring>
中包含<xsl:analyze-string>
。在我的情况下,我有两个正则表达式'AND facet_(.*?):\(("?.*?"?)\)'
和'AND NOT facet_(.*?):\(("?.*?"?)\)'
,它们用于构建两个不同的Solr分面请求供我的Web应用程序使用,后者通过排除(AND NOT)排除。在非匹配子字符串中包含分析字符串 - XSLT 2.0
这是我的XML:
<facets>
<facet name="domain">
<facetEntry count="8007">domain1.co.uk</facetEntry>
<facetEntry count="6497">domain2.co.uk</facetEntry>
<facetEntry count="6180">domain3.co.uk</facetEntry>
</facet>
<facets>
然而,这是我使用的模板:
<xsl:template name="facets">
<xsl:param name="q" />
<xsl:analyze-string select="$q" regex='AND facet_(.*?):\(("?.*?"?)\)'>
<xsl:matching-substring>
<xsl:choose>
<xsl:when test="regex-group(1) = 'example1'">
<facet name="domain"><xsl:value-of select="regex-group(2)" /></facet>
</xsl:when>
<xsl:when test="regex-group(1) = 'example2'">
<facet name="content_type_norm"><xsl:value-of select="regex-group(2)" /></facet>
</xsl:when>
<xsl:when test="regex-group(1) = 'example2'">
<facet name="sentiment"><xsl:value-of select="regex-group(2)" /></facet>
</xsl:when>
</xsl:choose>
</xsl:matching-substring>
<xsl:non-matching-substring></xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
我曾多次尝试包括额外<xsl:analyze-string>
里面,但我总是回有语法错误。例如:
<xsl:non-matching-substring>
<xsl:analyze-string select="$q" regex='AND NOT facet_(.*?):\(("?.*?"?)\)'>
<xsl:choose>
<xsl:when test="regex-group(1) = 'example1'">
<facet name="domain"><xsl:value-of select="regex-group(2)" /></facet>
</xsl:when>
<xsl:when test="regex-group(1) = 'example2'">
<facet name="content_type_norm"><xsl:value-of select="regex-group(2)" /></facet>
</xsl:when>
<xsl:when test="regex-group(1) = 'example2'">
<facet name="sentiment"><xsl:value-of select="regex-group(2)" /></facet>
</xsl:when>
</xsl:choose>
</xsl:non-matching-substring>
</xsl:analyze-string>
在这种情况下,我返回了如下的错误:
The element type "xsl:analyze-string" must be terminated by the matching end-tag "".
我宁愿被卡住,我不知道这是否真的允许XSLT。你能帮我吗?
感谢的确,
一
非常感谢。请参阅我的尝试,下面 – paranza
我发布了一个语法正确的示例,希望有助于找到正确的XML和XSLT语法。请在您的问题中提供任何代码示例,而不是回答。并考虑使用XML编辑器来帮助您使用正确的语法。 –
另外请注意,我没有尝试在这个答案实现某种匹配,我只是把正确的语法到位。我不知道你甚至需要一个嵌套分析字符串,因为通常我会期望它执行'