Applicazione di una trasformazione XSLT a un DataSetApplying an XSLT Transform to a DataSet

Il WriteXml metodo il DataSet consente di scrivere il contenuto di un set di dati come dati XML.The WriteXml method of the DataSet enables you to write the contents of a DataSet as XML data. Tali dati XML vengono solitamente convertiti in un formato diverso mediante XSLT (Extensible Stylesheets Language Transformations).A common task is to then transform that XML to another format using XSL transformations (XSLT). Tuttavia, la sincronizzazione un DataSet con un XmlDataDocument consente di applicare un foglio di stile XSLT al contenuto di un set di dati senza dover prima scrivere il contenuto del Set di dati come dati XML mediante WriteXml.However, synchronizing a DataSet with an XmlDataDocument enables you to apply an XSLT stylesheet to the contents of a DataSet without having to first write the contents of the DataSet as XML data using WriteXml.

Nell'esempio seguente consente di popolare un DataSet con tabelle e relazioni, viene sincronizzata la set di dati con un XmlDataDocumente scrive una parte di Set di dati come file HTML mediante un foglio di stile XSLT.The following example populates a DataSet with tables and relationships, synchronizes the DataSet with an XmlDataDocument, and writes a portion of the DataSet as an HTML file using an XSLT stylesheet. Di seguito viene riportato il contenuto del foglio di stile XSLT.Following are the contents of the XSLT stylesheet.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  

<xsl:template match="CustomerOrders">  
  <HTML>  
  <STYLE>  
  BODY {font-family:verdana;font-size:9pt}  
  TD   {font-size:8pt}  
  </STYLE>  
    <BODY>  
    <TABLE BORDER="1">  
      <xsl:apply-templates select="Customers"/>  
    </TABLE>  
    </BODY>  
  </HTML>  
</xsl:template>  

<xsl:template match="Customers">  
    <TR><TD>  
      <xsl:value-of select="ContactName"/>, <xsl:value-of select="Phone"/><BR/>  
    </TD></TR>  
      <xsl:apply-templates select="Orders"/>  
</xsl:template>  

<xsl:template match="Orders">  
  <TABLE BORDER="1">  
    <TR><TD valign="top"><B>Order:</B></TD><TD valign="top"><xsl:value-of select="OrderID"/></TD></TR>  
    <TR><TD valign="top"><B>Date:</B></TD><TD valign="top"><xsl:value-of select="OrderDate"/></TD></TR>  
    <TR><TD valign="top"><B>Ship To:</B></TD>  
        <TD valign="top"><xsl:value-of select="ShipName"/><BR/>  
        <xsl:value-of select="ShipAddress"/><BR/>  
        <xsl:value-of select="ShipCity"/>, <xsl:value-of select="ShipRegion"/>  <xsl:value-of select="ShipPostalCode"/><BR/>  
        <xsl:value-of select="ShipCountry"/></TD></TR>  
  </TABLE>  
</xsl:template>  

</xsl:stylesheet>  

Il codice seguente compila il DataSet e applica il foglio di stile XSLT.The following code fills the DataSet and applies the XSLT style sheet.

Nota

Se si desidera applicare un foglio di stile XSLT a un set di dati che contiene le relazioni, per ottenere prestazioni ottimali se si imposta la Nested proprietà del DataRelation per trueper ogni relazione annidata.If you are applying an XSLT style sheet to a DataSet that contains relations, you achieve best performance if you set the Nested property of the DataRelation to true for each nested relation. Ciò consente di navigare all'interno della gerarchia e trasformare i dati mediante i fogli di stile XSLT, che implementano un'elaborazione sequenziale dall'alto verso il basso, anziché mediante gli assi di posizione XPath, ad esempio i nodi di pari livello precedenti e successivi nelle espressioni di verifica del nodo dei fogli di stile, che comportano un maggiore dispendio di risorse.This allows you to use XSLT style sheets that implement natural top-down processing to navigate the hierarchy and transform the data, as opposed to using performance-intensive XPath location axes (for example, preceding-sibling and following-sibling in style sheet node test expressions) to navigate it. Per ulteriori informazioni sulle relazioni nidificate, vedere annidamento di oggetti DataRelation.For more information on nested relations, see Nesting DataRelations.

' Assumes connection is a valid SqlConnection.  
Dim dataSet As DataSet = New DataSet("CustomerOrders")  

Dim customerAdapter As SqlDataAdapter = New SqlDataAdapter( _  
  "SELECT * FROM Customers", connection)  
customerAdapter.Fill(dataSet, "Customers")  

Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter( _  
  "SELECT * FROM Orders", connection)  
orderAdapter.Fill(dataSet, "Orders")  

connection.Close()  

dataSet.Relations.Add("CustOrders", _  
dataSet.Tables("Customers").Columns("CustomerID"), _  
dataSet.Tables("Orders").Columns("CustomerID")).Nested = true  

Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet)   

Dim xslTran As XslTransform = New XslTransform  
xslTran.Load("transform.xsl")  

Dim writer As XmlTextWriter = New XmlTextWriter( _  
  "xslt_output.html", System.Text.Encoding.UTF8)  

xslTran.Transform(xmlDoc, Nothing, writer)  
writer.Close()  
// Assumes connection is a valid SqlConnection.  
connection.Open();  

DataSet custDS = new DataSet("CustomerDataSet");  

SqlDataAdapter customerAdapter = new SqlDataAdapter(  
  "SELECT * FROM Customers", connection);  
customerAdapter.Fill(custDS, "Customers");  

SqlDataAdapter orderAdapter = new SqlDataAdapter(  
  "SELECT * FROM Orders", connection);  
orderAdapter.Fill(custDS, "Orders");  

connection.Close();  

custDS.Relations.Add("CustOrders",  
  custDS.Tables["Customers"].Columns["CustomerID"],  
                     custDS.Tables["Orders"].Columns["CustomerID"]).Nested = true;  

XmlDataDocument xmlDoc = new XmlDataDocument(custDS);   

XslTransform xslTran = new XslTransform();  
xslTran.Load("transform.xsl");  

XmlTextWriter writer = new XmlTextWriter("xslt_output.html",   
  System.Text.Encoding.UTF8);  

xslTran.Transform(xmlDoc, null, writer);  
writer.Close();  

Vedere ancheSee Also

Sincronizzazione di DataSet e XmlDataDocumentDataSet and XmlDataDocument Synchronization
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center