È ansible utilizzare un’espressione Dynamic xPath in un foglio di stile xslt?

Mi piacerebbe utilizzare il valore di un parametro xslt in un’espressione xpath. In particolare, come parte di una chiamata not() in un’espressione <xsl:if .

    no                           

Sono un po ‘oscuro su quale sia la syntax corretta per la creazione di un’espressione xpath dynamic in un foglio di stile xslt. Sono anche un po ‘sfocato sulla differenza tra un parametro, una variabile e come l’espansione di entrambe le opere. Ad esempio, con i parametri, so che a volte ho bisogno delle parentesi, ea volte no.

     

Qualsiasi aiuto generale / specifico sarebbe molto apprezzato.

Controlla http://www.exslt.org/ . In particolare, guarda la dynamic: valuta il modulo.

XSLT non supporta la valutazione dynamic di XPath: ecco perché è necessario utilizzare una funzione di estensione come la evaluate di EXSLT per farlo.

Se non si desidera utilizzare le funzioni di estensione (e ci sono buone ragioni per non farlo), un’altra possibilità è di interrogare il DOM del documento di input prima di eseguire la trasformazione e passare il set di nodes nella trasformazione come parametro.

modificare

Informazioni su queste parentesi graffe: quelle sono modelli di valore dell’attributo (AVT). Questi sono semanticamente equivalenti in una trasformazione XSLT:

       

Il secondo è solo una scorciatoia per il primo.

Informazioni su variabili e parametri: sintatticamente, non c’è differenza tra una variabile e un parametro; ovunque tu $foo riferimento a $foo in un’espressione XPath, funzionerà allo stesso modo se foo è definito da xsl:variable o xsl:param .

La differenza tra i due è come vengono popolati. Le variabili sono popolate nella dichiarazione xsl:variable . I parametri sono dichiarati in un modello denominato usando xsl:param , ma sono popolati da qualunque chiamata chiama il modello chiamato, usando xsl:with-param , ad esempio:

      ... 

La grande eccezione clona a questo è i parametri che sono un figlio di xsl:stylesheet . Non c’è modo di popolare quei parametri all’interno della trasformazione; quelli sono popolati esternamente, da qualunque meccanismo (specifico dell’ambiente) sta invocando la trasformazione.

Un caso d’uso piuttosto comune sta supplendo al fatto che XSLT non abbia una funzione di data di sistema. Quindi vedrai qualcosa come:

  ... 

e poi, quando invochi la trasformazione, qualcosa di simile a questo (in C #):

 XsltArgumentList args = new XsltArgumentList(); args.AddParam("system-date", "", DateTime.Now.ToString("s")); xslt.Transform(input, args, result); 

Prova qualche variazione di questo:

   

Il problema è nel modo in cui XPath valuta i booleani. Qualsiasi stringa non vuota verrà valutata su true in XPath. Leggi questo articolo sui booleani di xpath .

Per quanto riguarda le altre domande … Variabili e parametri si comportano l’uno con l’altro nelle espressioni XPath. Entrambi sono referenziati con il modulo $ var.

Per qualsiasi attributo XSLT denominato “seleziona”, non ti servono le parentesi. Le parentesi sono utilizzate in quelli che sono chiamati “modelli valore di attributo”. Li usi quando XSLT si aspetta una stringa, ad esempio:

     

Le specifiche XSLT parlano di AVT , e così fa questa pagina .