Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Środowisko SSIS Integration Runtime w usłudze Azure Data Factory
Zweryfikuj dokumenty XML i uzyskaj szczegółowe dane wyjściowe błędów, włączając właściwość ValidationDetails zadania XML.
Poniższy zrzut ekranu przedstawia Edytor zadań XML z ustawieniami wymaganymi do walidacji XML ze szczegółowymi komunikatami o błędach.
Przed udostępnieniem właściwości ValidationDetails walidacja XML przez zadanie XML zwróciła tylko wynik true lub false bez informacji o błędach lub ich lokalizacjach. Teraz, gdy ustawiasz ValidationDetails na True, plik wyjściowy zawiera szczegółowe informacje o każdym błędzie, w tym numer linii i pozycję. Te informacje umożliwiają zrozumienie, zlokalizowanie i naprawienie błędów w dokumentach XML.
Funkcjonalność walidacji XML łatwo się skaluje w przypadku dużych dokumentów XML i dużej liczby błędów. Ponieważ sam plik wyjściowy jest w formacie XML, możesz zapytać i analizować wynik. Na przykład, jeśli wyjście zawiera dużą liczbę błędów, można je pogrupować, używając zapytania Transact-SQL, jak opisano w tym temacie.
Note
SQL Server Integration Services (SSIS) wprowadził właściwość ValidationDetails w SQL Server 2012 (11.x) Service Pack 2. Ta właściwość jest również dostępna w SQL Server 2014 (12.x), a także w SQL Server 2016 (13.x).
Przykładowy wynik dla poprawnego XML
Oto przykładowy plik wyjściowy z wynikami walidacji dla poprawnego pliku XML.
<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>
Przykładowy wynik dla XML, który nie jest poprawny
Oto przykładowy plik wyjściowy z wynikami walidacji pliku XML zawierającego niewielką liczbę błędów. Tekst elementów błędu <> został owinięty dla czytelności.
<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>
Analizuj wyniki walidacji XML za pomocą zapytania Transact-SQL
Jeśli wyjście walidacji XML zawiera dużą liczbę błędów, możesz użyć zapytania Transact-SQL, aby załadować wynik w SQL Server Management Studio. Następnie możesz przeanalizować listę błędów ze wszystkimi funkcjami języka T-SQL, w tym WHERE, GROUP BY, ORDER BY, JOIN i tak dalej.
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');
Oto wynik w Management Studio drugiego przykładowego zapytania pokazanego w poprzednim tekście.