En mi experiencia, XSLT es más conciso y legible cuando se trata principalmente de reorganizar y seleccionar elementos xml existentes. XPath es corto y fácil de entender, y la sintaxis xml evita ensuciar el código con las declaraciones XElement
y XAttribute
. XSLT funciona bien como un árbol xml transformar el idioma.
Sin embargo, su manejo de cadena es deficiente, el bucle no es intuitivo y no existe un concepto significativo de subrutinas: no puede transformar la salida de otra transformación.
Por lo tanto, si realmente quiere juguetear con el elemento y el contenido de atributos, rápidamente se queda corto. No hay problema en el uso de ambos, incidentalmente, XSLT para normalizar la estructura (por ejemplo, para garantizar que todos los elementos table
tengan elementos tbody
) y linq-to-xml para interpretarlo. Las posibilidades de concordancia condicional priorizadas significan que XSLT es más fácil de usar cuando se trata de muchas coincidencias similares pero distintas. Xslt es bueno en la simplificación de documentos, pero le faltan demasiadas funciones básicas para ser suficiente por sí mismo.
Habiendo brincado de todo corazón en el carro de Linq-to-Xml, diría que tiene menos superposición con XSLT que podría parecer a primera vista. (Y me encantaría ver una implementación de XSLT 2.0/XQuery 1.0 para .NET).
En términos de rendimiento, ambos técnicos son rápidos. De hecho, dado que es tan difícil expresar operaciones lentas, es poco probable que active accidentalmente un caso lento en XSLT (a menos que empiece a jugar con recursividad ...). Por el contrario, la potencia de LINQ a Xml también puede hacer que sea lenta: simplemente use cualquier objeto .NET pesado en algún bucle interno y obtendrá un incipiente problema de rendimiento.
Hagas lo que hagas, no intentes abusar de XSLT utilizándolo para realizar otra cosa que la lógica más simple: es mucho más prolijo y menos legible que el equivalente C#. Si necesita un montón de lógica (incluso cosas simples como date > DateTime.Now ? "will be" : "has"
se convierten en enormes hacks inflados en XSLT) y no desea usar tanto XSLT como Linq a Xml, use Linq.
Visual Studio trae xsltc.exe (no estoy seguro si ya está incluido con la edición estándar) que le permite compilar un ensamblado (dll en lenguaje intermedio) desde su XSLT. Por lo tanto, no necesariamente hay una penalización para la compilación XSLT en tiempo de ejecución. –
XSLT es un dolor para depurar en mi opinión. Linq to XML es más depurable ... si divide sus declaraciones encadenadas. –
@Frank: ¿Ha comprobado el depurador XSLT de VS 2008 (o uno de los otros IDEs de XSLT como Oxygen o Altova XMLSpy)? Te permiten recorrer tu transformación XSL tal como lo harías con C# o código Java. –