XSLT vs LINQ to XML Transformations
In questo periodo sto facendo diversi esperimenti con LINQ to XML. Devo dire che l'idea è interessante e ci sono diversi aspetti curiosi oltre che stimolanti. Per esempio stasera stavo valutando la possibilità di trasformare grafi XML usando codice .NET, tramite LINQ to XML Transformations, anziché XSLT. Lasciando stare i sentimenti :-) ... avete voglia di farmi sapere (via email o con i commenti) quale tra le due seguenti strade preferite per trasformare un documento XML fatto così:
<?xml version="1.0" encoding="utf-8"?>
<customers>
<customer name="Paolo" city="Brescia" country="Italy" />
<customer name="Luca" city="Florence" country="Italy" />
<customer name="Ermes" city="Paris" country="France" />
<customer name="Franke" city="Munich" country="Germany" />
</customers>
in uno fatto così:
<?xml version="1.0" encoding="utf-8"?>
<c:customers xmlns:c="http://schemas.devleap.com/Customers">
<c:customer>
<c:name>Paolo</c:name>
<c:city>Brescia</c:city>
</c:customer>
<c:customer>
<c:name>Luca</c:name>
<c:city>Florence</c:city>
</c:customer>
</c:customers>
La prima strada è usare XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:c="http://schemas.devleap.com/Customers">
<xsl:template match="customers">
<c:customers>
<xsl:for-each select="customer[@country = 'Italy']">
<c:customer>
<c:name><xsl:value-of select="@name"/></c:name>
<c:city><xsl:value-of select="@city"/></c:city>
</c:customer>
</xsl:for-each>
</c:customers>
</xsl:template>
</xsl:stylesheet>
La seconda strada è usare LINQ to XML Transformations:
XNamespace ns = "http://schemas.devleap.com/Customers";
XElement destinationXmlCustomers =
new XElement(ns + "customers",
new XAttribute(XNamespace.Xmlns + "c", ns),
from c in sourceXmlCustomers.Elements("customer")
where c.Attribute("country").Value == "Italy"
select new XElement(ns + "customer",
new XElement(ns + "name", c.Attribute("name")),
new XElement(ns + "city", c.Attribute("city"))));
Io ho una mia idea, però vorrei sentire anche il vostro parere...
Grazie.