Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
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.