2012-07-09 13 views
8

Sto lavorando su un'applicazione asp.net basata su .net 2.0.utilizza il carattere jolly per corrispondere all'attributo in xpath

E ho riscontrato alcuni problemi durante l'elaborazione dell'XML.

Supponiamo che io ho XML come questo:

<person name="xxxyx" age="32" /> 

<person name="zzz" age="32" /> 

<person name="yyyxx" age="32" /> 

Ora voglio selezionare la persona il cui nome contiene yx

Come faccio ad usare XPath per la sua attuazione?

so solo questa espressione corrisponderà alla persona il cui nome è esattamente "yx":

"//person[name='yx'"]" 

Come fare la ricerca fuzzy?

BTW, qualche idea di ordinare la persona abbinata per l'attributo specificato come "nome"?

+0

Come deve l'ordinamento essere fatto, fa questo si riferisce a una trasformazione XSL? – hielsnoppe

+0

Non ho mai usato xsl. – hguser

+0

Questo dovrebbe aiutare: http://stackoverflow.com/questions/5607592/xpath-and-wildcards/5607636#5607636 –

risposta

9

Come suggerito da @Utkanos //person[contains(@name, 'yx')] deve corrispondere ai nodi desiderati.

XPath è, almeno a mia conoscenza, non in grado di fornire ordini sui nodi, ma restituisce invece i set di nodi che sono "raccolta non ordinata di nodi senza duplicati" (vedere 1 e commenti). Tuttavia nella versione 2.0 potrebbero esserci modifiche a questo 2 con cui non sono familiare.

Supponendo che l'ordinamento dovrebbe essere fatto in una trasformazione XSL si potrebbe usare <xsl:sort /> come questo:

<xsl:apply-templates select="//person[contains(@name, 'yx')]"> 
    <xsl:sort select="@name" /> 
</xsl:apply-templates> 

Ci sono alcuni più attributi su <xsl:sort /> qui documentata: http://www.w3.org/TR/xslt#sorting

+2

Rimane vero in XPath 2.0 (e anzi 3.0) che XPath autonomo non ha capacità di smistamento - devi andare a XSLT o XQuery. –

8

Utilizzare la funzione .

//person[contains(@name, 'yx')] 

Inoltre, notare è necessario @ davanti name dal momento che è un attributo.

Demo.

Problemi correlati