Bagikan melalui


Memvalidasi XML dengan Tugas XML

Berlaku untuk: SQL Server SSIS Integration Runtime di Azure Data Factory

Validasi dokumen XML dan dapatkan output kesalahan kaya dengan mengaktifkan properti ValidationDetails dari Tugas XML.

Cuplikan layar berikut menunjukkan Editor Tugas XML dengan pengaturan yang diperlukan untuk validasi XML dengan output kesalahan yang kaya.

Properti tugas XML di Editor Tugas XML

Sebelum properti ValidationDetails tersedia, validasi XML oleh Tugas XML hanya mengembalikan hasil benar atau salah, tanpa informasi tentang kesalahan atau lokasinya. Sekarang, ketika Anda mengatur ValidationDetails ke True, file output berisi informasi terperinci tentang setiap kesalahan termasuk nomor baris dan posisi. Anda dapat menggunakan informasi ini untuk memahami, menemukan, dan memperbaiki kesalahan dalam dokumen XML.

Fungsionalitas validasi XML menskalakan dengan mudah untuk dokumen XML besar dan sejumlah besar kesalahan. Karena file output itu sendiri dalam format XML, Anda dapat mengkueri dan menganalisis output. Misalnya, jika output berisi sejumlah besar kesalahan, Anda dapat mengelompokkan kesalahan dengan menggunakan kueri Transact-SQL, seperti yang dijelaskan dalam topik ini.

Catatan

SQL Server Integration Services (SSIS) memperkenalkan properti ValidationDetails di Paket Layanan SQL Server 2012 (11.x) 2. Properti ini juga tersedia di SQL Server 2014 (12.x) dan di SQL Server 2016 (13.x).

Contoh output untuk XML yang valid

Berikut adalah contoh file output dengan hasil validasi untuk file XML yang valid.

  
<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>  

Sampel output untuk XML yang tidak valid

Berikut adalah contoh file output dengan hasil validasi untuk file XML yang berisi sejumlah kecil kesalahan. Teks <elemen kesalahan> telah dibungkus untuk keterbacaan.

  
<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>  

Menganalisis output validasi XML dengan kueri Transact-SQL

Jika output validasi XML berisi sejumlah besar kesalahan, Anda dapat menggunakan kueri Transact-SQL untuk memuat output di SQL Server Management Studio. Kemudian Anda dapat menganalisis daftar kesalahan dengan semua kemampuan bahasa T-SQL termasuk WHERE, GROUP BY, ORDER BY, JOIN, dan sebagainya.

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');  
  

Berikut adalah hasilnya di Management Studio dari kueri sampel kedua yang ditampilkan dalam teks sebelumnya.

Kueri untuk mengelompokkan kesalahan XML di Management Studio

Lihat Juga

Tugas XML
Editor Tugas XML (Halaman Umum)