Esempio: specifica della direttiva ELEMENT e della codifica di entitàExample: Specifying the ELEMENT Directive and Entity Encoding

In questo esempio viene illustrata la differenza fra le direttive ELEMENT e XML .This example illustrates the difference between the ELEMENT and XML directives. La direttiva ELEMENT sostituisce i dati con entità, mentre la direttiva XML non esegue questa operazione.The ELEMENT directive entitizes the data, but the XML directive does not. Nella query, all'elemento <Summary> viene assegnato codice XML, <Summary>This is summary description</Summary>.The <Summary> element is assigned XML, <Summary>This is summary description</Summary>, in the query.

Considerare la query seguente:Consider this query:

USE AdventureWorks2012;  
GO  
SELECT  1 as Tag,  
        0 as Parent,  
        ProductModelID  as [ProductModel!1!ProdModelID],  
        Name            as [ProductModel!1!Name],  
        NULL            as [Summary!2!SummaryDescription!ELEMENT]  
FROM    Production.ProductModel  
WHERE   ProductModelID=19  
UNION ALL  
SELECT  2 as Tag,  
        1 as Parent,  
        ProductModelID,  
        NULL,  
       '<Summary>This is summary description</Summary>'  
FROM   Production.ProductModel  
WHERE  ProductModelID=19  
FOR XML EXPLICIT  

Di seguito è riportato il risultato.This is the result. Nel risultato la descrizione di riepilogo viene sostituita con entità.The summary description is entitized in the result.

<ProductModel ProdModelID="19" Name="Mountain-100">  
  <Summary>  
    <SummaryDescription><Summary>This is summary description</Summary></SummaryDescription>  
  </Summary>  
</ProductModel>  

Se nel nome della colonna si specifica la direttiva XML Summary!2!SummaryDescription!XMLinvece della direttiva ELEMENT , si otterrà la descrizione di riepilogo senza sostituzione con entità.Now, if you specify the XML directive in the column name, Summary!2!SummaryDescription!XML, instead of the ELEMENT directive, you will receive the summary description without entitization.

<ProductModel ProdModelID="19" Name="Mountain-100">  
  <Summary>  
    <SummaryDescription>  
      <Summary>This is summary description</Summary>  
    </SummaryDescription>  
  </Summary>  
</ProductModel>  

Invece di assegnare un valore XML statico, la query seguente usa il metodo query() del tipo xml per recuperare la descrizione di riepilogo del modello di prodotto dalla colonna CatalogDescription di tipo xml .Instead of assigning a static XML value, the following query uses the query() method of the xml type to retrieve the product model summary description from the CatalogDescription column of xml type. Poiché è noto che il risultato sarà di tipo xml , non viene applicata la sostituzione con entità.Because the result is known to be of xml type, no entitization is applied.

SELECT  1 as Tag,  
        0 as Parent,  
        ProductModelID  as [ProductModel!1!ProdModelID],  
        Name            as [ProductModel!1!Name],  
        NULL            as [Summary!2!SummaryDescription]  
FROM    Production.ProductModel  
WHERE   CatalogDescription is not null  
UNION ALL  
SELECT  2 as Tag,  
        1 as Parent,  
        ProductModelID,  
        Name,  
       (SELECT CatalogDescription.query('  
            declare namespace pd="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
          /pd:ProductDescription/pd:Summary'))  
FROM     Production.ProductModel  
WHERE    CatalogDescription is not null  
ORDER BY [ProductModel!1!ProdModelID],Tag  
FOR XML EXPLICIT  

Vedere ancheSee Also

Utilizzo della modalità EXPLICIT con FOR XMLUse EXPLICIT Mode with FOR XML