Nella mia esperienza, XSLT è più conciso e leggibile quando si tratta principalmente di riorganizzare e selezionare elementi xml esistenti. XPath è breve e facile da capire, e la sintassi xml evita di sporcare il tuo codice con le dichiarazioni XElement
e XAttribute
. XSLT funziona correttamente come albero xml transform lingua.
Tuttavia, la gestione delle stringhe è scarsa, il ciclo non è intuitivo e non esiste un concetto significativo di subroutine: non è possibile trasformare l'output di un'altra trasformazione.
Quindi, se si vuole effettivamente giocherellare con elementi e attributi del contenuto, quindi rapidamente non è sufficiente. Non c'è alcun problema nell'usare entrambi, tra l'altro - XSLT per normalizzare la struttura (per esempio, per garantire che tutti gli elementi table
abbiano elementi tbody
) e linq-to-xml per interpretarlo. Le possibilità di corrispondenza condizionata prioritarie significano che XSLT è più facile da usare quando si ha a che fare con molte corrispondenze simili ma distinte. Xslt è bravo a semplificare i documenti, ma manca solo troppe funzioni di base per essere sufficiente da solo.
Avendo saltato con tutto il cuore sul carrozzone Linq-to-Xml, direi che ha meno sovrapposizioni con XSLT che potrebbe sembrare a prima vista. (E mi piacerebbe davvero vedere una implementazione XSLT 2.0/XQuery 1.0 per .NET).
In termini di prestazioni, entrambi i tecnici sono veloci. Infatti, poiché è così difficile esprimere operazioni lente, è improbabile che si inneschi casualmente un caso lento in XSLT (a meno che non inizi a giocare con la ricorsione ...). Al contrario, LINQ to Xml power può anche rallentare: basta usare qualsiasi oggetto .NET pesante in un loop interno e si ha un problema di prestazioni in erba.
Qualsiasi cosa tu faccia, non provare ad abusare di XSLT usandolo per eseguire qualsiasi cosa tranne la più semplice della logica: è molto più verboso e molto meno leggibile rispetto al C# equivalente. Se hai bisogno di un po 'di logica (anche le cose semplici come date > DateTime.Now ? "will be" : "has"
diventano enormi hack gonfiati in XSLT) e non vuoi usare sia XSLT e Linq per Xml, usa Linq.
fonte
2009-08-25 13:17:17
Visual Studio porta xsltc.exe (non è sicuro se sia già incluso nell'edizione standard) che consente di compilare un assembly (dll in lingua intermedia) dal proprio XSLT. Quindi non c'è necessariamente una penalità per la compilazione XSLT in fase di esecuzione. –
XSLT è un problema per il debug a mio parere. Da Linq a XML è più discutibile ... se si rompono le dichiarazioni concatenate. –
@Frank: hai controllato il debugger XSLT di VS 2008 (o uno degli altri IDE XSLT come Oxygen o Altova XMLSpy)? Ti permettono di passare attraverso la tua trasformazione XSL proprio come faresti con il C# o il codice Java. –