Eseguire la convalida XML con Attività XMLValidate XML with the XML Task

È possibile convalidare documenti XML e ottenere output avanzato degli errori abilitando la proprietà ValidationDetails dell'Attività XML.Validate XML documents and get rich error output by enabling the ValidationDetails property of the XML Task.

L'immagine seguente mostra l' Editor attività XML con le impostazioni necessarie per la convalida di XML con l'output di errore completo.The following screen shot shows the XML Task Editor with the settings required for XML validation with rich error output.

Proprietà dell'attività XML nell'Editor attività XMLXML task properties in the XML Task Editor

Prima che fosse disponibile la proprietà ValidationDetails , la convalida XML da parte dell'Attività XML restituiva solo un risultato di tipo True o False, senza informazioni sugli errori o sulle rispettive posizioni.Before the ValidationDetails property was available, XML validation by the XML Task returned only a true or false result, with no information about errors or their locations. Attualmente, quando si imposta ValidationDetails su True, il file di output contiene informazioni dettagliate su ogni errore, inclusi il numero di riga e la posizione.Now, when you set ValidationDetails to True, the output file contains detailed information about every error including the line number and the position. È possibile usare questa informazione per comprendere, individuare e risolvere gli errori nei documenti XML.You can use this information to understand, locate, and fix errors in XML documents.

La funzionalità di convalida XML è facilmente scalabile per documenti XML di grandi dimensioni e un numero elevato di errori.The XML validation functionality scales easily for large XML documents and large numbers of errors. Dato che il file di output è in formato XML, è possibile eseguire una query e analizzare l'output.Since the output file itself is in XML format, you can query and analyze the output. Ad esempio, se l'output contiene un numero elevato di errori, è possibile raggrupparli usando un Transact-SQLTransact-SQL , come descritto in questo argomento.For example, if the output contains a large number of errors, you can group the errors by using a Transact-SQLTransact-SQL query, as described in this topic.

Nota

SQL ServerSQL Server Integration ServicesIntegration Services ( SSISSSIS) introdotto il ValidationDetails proprietà SQL Server 2012SQL Server 2012 Service Pack 2. Integration ServicesIntegration Services ( SSISSSIS) introduced the ValidationDetails property in SQL Server 2012SQL Server 2012 Service Pack 2. La proprietà è disponibile anche in SQL Server 2014SQL Server 2014 e in SQL Server 2016SQL Server 2016.The property is also available in SQL Server 2014SQL Server 2014 and in SQL Server 2016SQL Server 2016.

Esempio di output per un file XML validoSample output for XML that's valid

Ecco un file di output di esempio con i risultati della convalida per un file XML valido.Here is a sample output file with validation results for a valid XML file.


<root xmlns:ns="http://schemas.microsoft.com/xmltools/2002/xmlvalidation">  
    <metadata>  
        <result>true</result>  
        <errors>0</errors>  
        <warnings>0</warnings>  
        <startTime>2015-05-28T10:27:22.087</startTime>  
        <endTime>2015-05-28T10:29:07.007</endTime>  
        <xmlFile>d:\Temp\TestData.xml</xmlFile>  
        <xsdFile>d:\Temp\TestSchema.xsd</xsdFile>  
    </metadata>  
    <messages />  
</root>  

Esempio di output per un file XML non validoSample output for XML that's not valid

Ecco un file di output di esempio con i risultati della convalida per un file XML che contiene un numero ridotto di errori.Here is a sample output file with validation results for an XML file that contains a small number of errors. Il testo del <errore > è stato eseguito il wrapping di elementi per migliorare la leggibilità.The text of the <error> elements has been wrapped for readability.


<root xmlns:ns="http://schemas.microsoft.com/xmltools/2002/xmlvalidation">  
    <metadata>  
        <result>false</result>  
        <errors>2</errors>  
        <warnings>0</warnings>  
        <startTime>2015-05-28T10:45:09.538</startTime>  
        <endTime>2015-05-28T10:45:09.558</endTime>  
        <xmlFile>C:\Temp\TestData.xml</xmlFile>  
        <xsdFile>C:\Temp\TestSchema.xsd</xsdFile>  
    </metadata>  
    <messages>  
        <error line="5" position="26">The 'ApplicantRole' element is invalid - The value 'wer3' is invalid  
    according to its datatype 'ApplicantRoleType' - The Enumeration constraint failed.</error>  
        <error line="16" position="28">The 'Phone' element is invalid - The value 'we3056666666' is invalid  
     according to its datatype 'phone' - The Pattern constraint failed.</error>  
    </messages>  
</root>  

Analizzare l'output della convalida XML con una query Transact-SQLAnalyze XML validation output with a Transact-SQL query

Se l'output della convalida XML contiene un numero elevato di errori, è possibile usare una query di Transact-SQLTransact-SQL per caricare l'output in SQL Server Management StudioSQL Server Management Studio.If the output of XML validation contains a large number of errors, you can use a Transact-SQLTransact-SQL query to load the output in SQL Server Management StudioSQL Server Management Studio. È quindi possibile analizzare l'elenco di errori con tutte le funzionalità del linguaggio T-SQL, inclusi WHERE, GROUP BY, ORDER BY, JOIN e così via.Then you can analyze the error list with all the capabilities of the T-SQL language including WHERE, GROUP BY, ORDER BY, JOIN, and so forth.

DECLARE @xml XML;  

SELECT @xml = XmlDoc     
FROM OPENROWSET (BULK N'C:\Temp\XMLValidation_2016-02-212T10-41-00.xml', SINGLE_BLOB) AS Tab(XmlDoc);  

-- Query # 1, flat list of errors  
-- convert to relational/rectangular  
;WITH XMLNAMESPACES ('http://schemas.microsoft.com/xmltools/2002/xmlvalidation' AS ns), rs AS  
(  
SELECT col.value('@line','INT') AS line  
     , col.value('@position','INT') AS position  
     , col.value('.','VARCHAR(1024)') AS error  
FROM @XML.nodes('/root/messages/error') AS tab(col)  
)  
SELECT * FROM rs;  
-- WHERE error LIKE ‘%whatever_string%’  

-- Query # 2, count of errors grouped by the error message  
-- convert to relational/rectangular  
;WITH XMLNAMESPACES ('http://schemas.microsoft.com/xmltools/2002/xmlvalidation' AS ns), rs AS  
(  
SELECT col.value('@line','INT') AS line  
     , col.value('@position','INT') AS position  
     , col.value('.','VARCHAR(1024)') AS error  
FROM @XML.nodes('/root/messages/error') AS tab(col)  
)  
SELECT COALESCE(error,'Total # of errors:') AS [error], COUNT(*) AS [counter]  
FROM rs  
GROUP BY GROUPING SETS ((error), ())  
ORDER BY 2 DESC, COALESCE(error, 'Z');  

Ecco il risultato in Management StudioManagement Studio della seconda query di esempio illustrata nel testo precedente.Here is the result in Management StudioManagement Studio of the second sample query shown in the preceding text.

Query per raggruppare gli errori XML in Management StudioQuery to group XML errors in Management Studio

Vedere ancheSee Also

Attività XML XML Task
Editor attività XML ( Pagina generale )XML Task Editor (General Page)