Validera XML med XML-uppgiften

Gäller för:SQL Server SSIS Integration Runtime i Azure Data Factory

Validera XML-dokument och få omfattande felutdata genom att aktivera egenskapen ValidationDetails för XML-uppgiften.

Följande skärmdump visar XML Task Editor med de inställningar som krävs för XML-validering med rik felutdata.

XML-uppgiftsegenskaper i XML Task Editor

Innan egenskapen ValidationDetails var tillgänglig returnerade XML-valideringen av XML-uppgiften endast ett sant eller falskt resultat, utan information om fel eller deras platser. När du nu sätter ValidationDetails till True innehåller utdatafilen detaljerad information om varje fel, inklusive radnummer och position. Du kan använda den här informationen för att förstå, hitta och åtgärda fel i XML-dokument.

XML-valideringsfunktionen skalar enkelt för stora XML-dokument och stora antal fel. Eftersom utdatafilen i sig är i XML-format kan du fråga och analysera utdatan. Till exempel, om utdata innehåller ett stort antal fel, kan du gruppera felen genom att använda en Transact-SQL fråga, som beskrivs i detta ämne.

Note

služba SSIS (SSIS) introducerade egenskapen ValidationDetails i SQL Server 2012 (11.x) Service Pack 2. Egendomen finns också tillgänglig i SQL Server 2014 (12.x) och i SQL Server 2016 (13.x).

Exempelutdata för XML som är giltig

Här är en exempelutdata med valideringsresultat för en giltig XML-fil.

  
<root xmlns:ns="https://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>  

Exempelutdata för XML som inte är giltigt

Här är en exempelutdata med valideringsresultat för en XML-fil som innehåller ett litet antal fel. Texten i <felelementen> har omslagits för läsbarhet.

  
<root xmlns:ns="https://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>  

Analysera XML-valideringsutdata med en Transact-SQL fråga

Om XML-valideringsutdata innehåller många fel kan du använda en Transact-SQL fråga för att ladda utdata i SQL Server Management Studio. Sedan kan du analysera fellistan med alla funktioner i T-SQL-språket, inklusive WHERE, GROUP BY, ORDER BY, JOIN och så vidare.

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 ('https://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 ('https://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');  
  

Här är resultatet i Management Studio av den andra exempelfrågan som visas i föregående text.

Fråga för att gruppera XML-fel i Management Studio