Очень простой вопрос строки XSLT - PullRequest
1 голос
/ 16 апреля 2009

Как бы я сделал "подстроку (переменную, 1,1) между a-z или A-Z", тогда как X еще делает Y, используя XSLT? Я знаю, что одним из вариантов будет использование регулярных выражений, но я ожидаю, что будет что-то, что не так уж и излишне.

Ответы [ 2 ]

3 голосов
/ 16 апреля 2009

Простое решение XSLT 1.0 :

Это преобразование:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:variable name="vLetters"
  select="'ABCDEFGHIKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"/>

  <xsl:variable name="vText" select="'1Text'"/>

    <xsl:template match="/">
      <xsl:choose>
        <xsl:when test=
          "contains($vLetters, substring($vText,1,1))">
            Letter
        </xsl:when>
        <xsl:otherwise>
          Not Letter
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

при применении к любому документу XML (не используется), дает желаемый результат :

      Not Letter

В зависимости от конкретного случая можно добавить любую обработку, необходимую для каждого из двух «предложений» (<xsl:when> и <xsl:otherwise>) инструкции <xsl:choose>.

1 голос
/ 16 апреля 2009

А для XSLT 2.0 вы можете использовать функцию регулярного выражения matches:

<xsl:choose>
  <xsl:when test="matches($variable1, '^[a-zA-Z].*$')">
    Match
  </xsl:when>
  <xsl:otherwise>
   NoMatch
</xsl:otherwise>
</xsl:choose>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...