2011-08-23 18 views
6

Esiste un equivalente xsl di sql come o una ricerca fuzzy ?ricerca xsl like o fuzzy?

ad esempio:

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

Buona domanda, +1. Vedere la mia risposta per l'espressione XPath che è necessario utilizzare e per un certo numero di funzioni XPath standard su stringhe che possono tornare utili in casi simili come i propri. :) –

risposta

3
Non

esattamente, ma si ha un sacco di funzioni di stringa, come contains, starts-with, etc.È possibile vedere la documentazione MS' su queste funzioni qui:

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

vostro particolare di selezione sarebbe qualcosa di simile:

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

Tutte le buone risposte, questo è quello che ho finito per usare però. Grazie! –

+0

Prego. Felice di averti sentito risolvere il tuo problema! –

3

Usa (l'attributo select) la funzione XPath standard di contains() come in seguente espressione XPath:

foo[contains(foo_type, '1')] 

seconda del caso concreto, altre funzioni XPath standard, come indicato di seguito, può anche essere utile:

Do atto cheends-with(), matches(), tokenize() e replace()sono disponibili solo in XPath 2.0.

È possibile utilizzare la seguente espressione XPath 1.0 per lo stesso scopo di XPath 2.0 funzione ends-with():

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

è equivalente a:

ends-with($s, $target) 
1

In XSLT 2.0, utilizzare

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

differenza SQL, che ha una sintassi modello piuttosto primitivo e non ortodosso, usi XSLT espressioni regolari che sono molto vicine alla sintassi usata in Perl e nella maggior parte degli altri dialetti regex moderni.

+0

Grazie per la modifica, @ Michael Kay. +1 per questa risposta. –