xsl нравится или нечеткий поиск?

Есть ли xsl-эквивалент sql-подобного или нечеткого поиска?

например:

<xsl:for-each select="foo[foo_type like '%1%']">

3 ответа

Решение

Не совсем, но у вас есть много строковых функций, как contains, starts-withи т.д. Вы можете увидеть документацию MS по этим функциям здесь:

http://msdn.microsoft.com/en-us/library/ms256195.aspx

Ваш конкретный выбор будет что-то вроде:

<xsl:for-each select="*[contains(name(),'1')]">

Используйте (в select атрибут) стандартная функция XPath contains() как в следующем выражении XPath:

foo[contains(foo_type, '1')]

В зависимости от конкретного случая также могут быть полезны другие стандартные функции XPath, перечисленные ниже:

  • starts-with()

  • ends-with()

  • substring()

  • substring-before()

  • substring-after()

  • string()

  • string-length()

  • concat()

  • translate()

  • normalize-space()

  • matches()

  • replace()

  • tokenize()

Обратите внимание, что ends-with(), matches(), tokenize() а также replace() доступны только в XPath 2.0.

Можно использовать следующее выражение XPath 1.0 для той же цели, что и функция XPath 2.0. ends-with() :

  substring($s, string-length($s) - string-length($target) +1)
=
  $target

эквивалентно:

ends-with($s, $target)

В XSLT 2.0 используйте

<xsl:for-each select="foo[matches(foo_type, '1')]">

В отличие от SQL, который имеет довольно примитивный и неортодоксальный синтаксис шаблонов, XSLT использует регулярные выражения, которые очень близки к синтаксису, используемому в Perl и большинстве других современных диалектов регулярных выражений.

Другие вопросы по тегам