You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在XPath 2/3的some/satisfies表达式中访问变量$x?

构建NOTATION语句的XSLT实现尝试

我创建了变量$notations来存储实体的扩展名,用于构建NOTATION语句:

<xsl:variable name="notations">
              <xsl:for-each select="//@infoEntityIdent">
                <xsl:variable name="uri" as="xs:anyURI" select="unparsed-entity-uri(.)"/>
              <xsl:analyze-string select="$uri" regex="([^.]*$)">
                <xsl:matching-substring>
                  <xsl:value-of select="regex-group(1)"/>
                </xsl:matching-substring>
              </xsl:analyze-string>
                <xsl:text> </xsl:text>
              </xsl:for-each>
</xsl:variable>

尝试使用some/satisfies表达式时,<xsl:text>中的变量$x会超出作用域:

<xsl:if test="some $x in $notations satisfies matches($x,'svg', 'i')">
          <xsl:text disable-output-escaping="yes" expand-text="1">&lt;!NOTATION {$x} SYSTEM "SVG"&gt;</xsl:text>
    </xsl:if>
<xsl:if test="some $x in $notations satisfies matches($x,'jpg', 'i')">
          <xsl:text disable-output-escaping="yes" expand-text="1">&lt;!NOTATION {$x} SYSTEM "JPG"&gt;</xsl:text>
    </xsl:if>

如果无法访问$x,就只能硬编码'SVG',同时对实体使用upper-case()来保证大小写匹配:

<xsl:if test="some $x in $notations satisfies matches($x,'svg', 'i')">
              <xsl:text disable-output-escaping="yes">&lt;!NOTATION SVG SYSTEM "SVG"&gt;</xsl:text>
</xsl:if>

另一种可行的实现方式是结合distinct-values()和tokenize()使用循环:

<xsl:for-each select="distinct-values(tokenize($notations))">
    <xsl:choose>
      <xsl:when test="matches(.,'svg', 'i')">
        <xsl:text disable-output-escaping="yes" expand-text="1">&lt;!NOTATION {.} SYSTEM "SVG"&gt;</xsl:text>
      </xsl:when>
      <xsl:when test="matches(.,'JPG','i')">
    <xsl:text disable-output-escaping="yes" expand-text="1">&lt;!NOTATION {.} SYSTEM "image/jpeg"&gt;</xsl:text>
  </xsl:when>
    </xsl:choose>
      <xsl:text>&#xA;</xsl:text>
</xsl:for-each>

内容的提问来源于stack exchange,提问作者Caroline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:30:57