gpt4 book ai didi

regex - 在非匹配子字符串中包含分析字符串 - XSLT 2.0

转载 作者:行者123 更新时间:2023-12-02 08:35:31 24 4
gpt4 key购买 nike

here 中的建议, 似乎可以包含 <xsl:analyze-string><xsl:non-matching-substring> .就我而言,我有两个正则表达式 'AND facet_(.*?):\(("?.*?"?)\)''AND NOT facet_(.*?):\(("?.*?"?)\)' ,它们用于构造两个不同的 Solr 分面请求以供我的 Web 应用程序使用,后者是排除(AND NOT)。

这是我的 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> inside ,但我总是返回语法错误。例如:

    <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 中是否真的被允许。你能帮忙吗?

非常感谢,

我.

最佳答案

你可以嵌套第二个xsl:analyze-string进入xsl:non-matching-substring如果你想要但当然是任何xsl:analyze-string的内容必须遵守规则

The content of the xsl:analyze-string instruction must take one of the following forms:

A single xsl:matching-substring instruction, followed by zero or more xsl:fallback instructions

A single xsl:non-matching-substring instruction, followed by zero or more xsl:fallback instructions

A single xsl:matching-substring instruction, followed by a single xsl:non-matching-substring instruction, followed by zero or more

xsl:fallback instructions

[ERR XTSE1130] It is a static error if the xsl:analyze-string instruction contains neither an xsl:matching-substring nor an xsl:non-matching-substring element.

所以不要输入 xsl:choose直接在里面,而不是xsl:matching-substring和/或 xsl:non-matching-substring , 然后可以根据需要采用任何序列构造函数,这允许 xsl:choose当然。

这是一个完整的示例,它是格式正确的 XML 和语法正确的 XSLT:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<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:analyze-string select="$q" regex='AND NOT 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:analyze-string>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>

</xsl:stylesheet>

尝试使用 XML 编辑器或编辑器插件,它有助于获得正确的嵌套,标签完成应避免拼写错误,如 </xsl:matching-sustring> .

关于regex - 在非匹配子字符串中包含分析字符串 - XSLT 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com