다음을 통해 공유


XML 작업을 사용하여 XML 유효성 검사

적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime

XML 작업의 ValidationDetails 속성을 사용하도록 설정하여 XML 문서의 유효성을 검사하고 풍부한 오류 출력을 가져올 수 있습니다.

다음 스크린샷은 풍부한 오류 출력이 있는 XML 유효성 검사에 필요한 설정이 있는 XML 작업 편집기를 보여줍니다.

XML 작업 편집기에서 XML 작업 속성

ValidationDetails 속성을 사용할 수 있기 전에 XML 작업의 XML 유효성 검사는 오류 또는 해당 위치에 대한 정보 없이 true 또는 false 결과만 반환했습니다. 이제 ValidationDetails를 True로 설정하면 출력 파일에 줄 번호와 위치를 비롯한 모든 오류에 대한 자세한 정보가 포함됩니다. 이 정보를 사용하여 XML 문서의 오류를 이해하고 찾고 수정할 수 있습니다.

XML 유효성 검사 기능은 큰 XML 문서 및 많은 수의 오류에 대해 쉽게 확장됩니다. 출력 파일 자체는 XML 형식이므로 출력을 쿼리하고 분석할 수 있습니다. 예를 들어 출력에 오류가 많이 포함되어 있으면 이 항목에서 설명하는 대로 Transact-SQL 쿼리를 사용하여 오류를 그룹화할 수 있습니다.

참고 항목

SSIS(SQL Server 통합 서비스)는 SQL Server 2012(11.x) 서비스 팩 2에서 ValidationDetails 속성을 도입했습니다. 속성 또한 SQL Server 2014(12.x) 및 SQL Server 2016(13.x)에서 사용할 수 있습니다.

유효한 XML에 대한 샘플 출력

유효한 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>  

유효하지 않은 XML에 대한 샘플 출력

다음은 적은 수의 오류가 포함된 XML 파일에 대한 유효성 검사 결과가 포함된 샘플 출력 파일입니다. 코드를 쉽게 확인할 수 있도록 <error> 요소의 텍스트에 줄 바꿈이 적용되었습니다.

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

Transact-SQL 쿼리를 사용하여 XML 유효성 검사 출력 분석

XML 유효성 검사의 출력에 오류가 많이 포함되어 있으면 Transact-SQL 쿼리를 사용하여 SQL Server Management Studio에서 출력을 로드할 수 있습니다. 그런 다음 WHERE, GROUP BY, ORDER BY, JOIN 등을 비롯한 T-SQL 언어의 모든 기능을 사용하여 오류 목록을 분석할 수 있습니다.

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

다음은 이전 텍스트에 표시된 두 번째 샘플 쿼리의 Management Studio 결과입니다.

Management Studio에서 XML 오류를 그룹화하기 위한 쿼리

참고 항목

XML 태스크
XML 작업 편집기(일반 페이지)