C#에서 XML을 읽는 방법

C Eseo Xmleul Ilgneun Bangbeob



인터넷 데이터 공유를 위해 널리 사용되는 데이터 형식은 XML입니다. XML에 데이터를 저장하고 유연하고 사용자 친화적인 방식으로 시스템 간에 교환할 수 있기 때문입니다. C#에서 XML 파일 읽기는 일반적인 작업이며 .NET 프레임워크는 XML 파일을 구문 분석하고 읽기 위한 다양한 클래스와 메서드를 제공합니다. 이 게시물에서는 .NET 프레임워크를 활용하여 C#에서 XML을 읽는 방법에 대해 설명합니다.

C#에서 XML 읽기

C#에서 XML 파일을 읽는 방법에는 여러 가지가 있으며 각 방법에는 장단점이 있으며 선택은 프로젝트의 요구 사항에 따라 다릅니다. 다음은 C#에서 XML 파일을 읽는 몇 가지 방법입니다.

다음은 내가 만든 XML 파일의 내용이며 앞으로 나올 방법의 데모에 사용될 것입니다.







< ?xml 버전 = '1.0' 부호화 = 'utf-8' ? >
< 직원 >
< 직원 >
< ID > 1 ID >
< 이름 > 샘 보쉬 이름 >
< 부서 > 마케팅 부서 >
< 샐러리 > 50000 샐러리 >
직원 >
< 직원 >
< ID > 2 ID >
< 이름 > 제인 도우 이름 >
< 부서 > 재원 부서 >
< 샐러리 > 60000 샐러리 >
직원 >
< 직원 >
< ID > ID >
< 이름 > 제임스 이름 >
< 부서 > 인적 자원 부서 >
< 샐러리 > 70000 샐러리 >
직원 >
직원 >

1: XmlDocument 사용

C#에서 XML 파일을 읽으려면 둘 다 System.Xml 네임스페이스의 일부인 XmlDocument 클래스 또는 XDocument 클래스를 사용할 수 있습니다. XmlDocument 클래스는 XML을 읽기 위한 DOM(Document Object Model) 접근 방식을 제공하는 반면 XDocument 클래스는 LINQ(Language-Integrated Query) 접근 방식을 제공합니다. 다음은 XmlDocument 클래스를 사용하여 XML 파일을 읽는 예입니다.



시스템 사용;
System.Xml 사용;

수업 프로그램
{
정적 무효 메인 ( [ ] 인수 )
{
XmlDocument 문서 = 새 XmlDocument ( ) ;
문서.로드 ( '직원.xml' ) ;

XmlNodeList 노드 = doc.DocumentElement.SelectNodes ( '/직원/직원' ) ;

각각 ( XmlNode 노드 ~에 노드 )
{
ID = node.SelectSingleNode ( 'ID' ) .InnerText;
문자열 이름 = node.SelectSingleNode ( '이름' ) .InnerText;
문자열 부서 = node.SelectSingleNode ( '부서' ) .InnerText;
문자열 급여 = node.SelectSingleNode ( '샐러리' ) .InnerText;
콘솔.쓰기줄 ( 'ID: {0}, 이름: {1}, 부서: {2}, 급여: {3}' , ID , 이름, 부서, 급여 ) ;
}
}
}

이 코드는 XmlDocument 클래스를 사용하여 XML 파일을 로드하고 SelectNodes 메서드를 사용하여 직원 노드 목록을 검색합니다. 그런 다음 각 직원 노드에 대해 SelectSingleNode 메서드를 사용하여 ID, 이름, 부서 및 급여 하위 노드의 값을 검색하고 Console.WriteLine을 사용하여 표시합니다.

2: XDocument 사용

또는 XDocument 클래스를 사용하여 LINQ 접근 방식을 사용하여 XML 파일을 읽을 수도 있으며 아래는 이를 수행하는 방법을 보여주는 코드입니다.

시스템 사용;

수업 프로그램
{
정적 무효 메인 ( [ ] 인수 )
{
XDocument 문서 = XDocument.Load ( '직원.xml' ) ;

각각 ( XElement 요소 ~에 doc.Descendants ( '직원' ) )
{
정수 ID = int.Parse ( 요소.요소 ( 'ID' ) .값 ) ;
문자열 이름 = element.Element ( '이름' ) .값;
문자열 부서 = element.Element ( '부서' ) .값;
int 급여 = int.Parse ( 요소.요소 ( '샐러리' ) .값 ) ;
콘솔.쓰기줄 ( $ 'ID: {id}, 이름: {name}, 부서: {department}, 급여: {salary}' ) ;
}
}
}

XML 파일은 XDocument.Load 메서드를 사용하여 XDocument 개체에 로드됩니다. 그런 다음 XML 파일의 '직원' 요소는 Descendants 기술을 사용하여 모두 검색됩니다. 각 요소에 대해 자식 요소는 Element 메서드를 사용하여 액세스하고 해당 값은 Value 속성을 사용하여 추출합니다. 마지막으로 추출된 데이터가 콘솔에 인쇄됩니다.

XDocument는 System.Xml.Linq 네임스페이스에 속하므로 C# 파일 맨 위에 다음 using 문을 포함해야 합니다.

3: XmlReader 사용

XmlReader는 C#에서 XML 파일을 읽는 빠르고 효율적인 방법입니다. 파일을 순차적으로 읽습니다. 즉, 한 번에 하나의 노드만 로드하므로 메모리에서 처리하기 어려운 대용량 XML 파일 작업에 이상적입니다.

시스템 사용;
System.Xml 사용;

수업 프로그램
{
정적 무효 메인 ( [ ] 인수 )
{
사용 ( XmlReader 판독기 = XmlReader.Create ( '직원.xml' ) )
{
~하는 동안 ( 리더.읽기 ( ) )
{
만약에 ( reader.NodeType == XmlNodeType.Element && 독자 이름 == '직원' )
{
콘솔.쓰기줄 ( 'ID: ' + reader.GetAttribute ( 'ID' ) ) ;
reader.ReadToDescendant ( '이름' ) ;
콘솔.쓰기줄 ( '이름: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( '부서' ) ;
콘솔.쓰기줄 ( '부서: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( '샐러리' ) ;
콘솔.쓰기줄 ( '샐러리: ' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

이 예제에서는 XmlReader.Create 메서드를 사용하여 XmlReader의 인스턴스를 만들고 XML 파일 경로를 매개 변수로 전달합니다. 그런 다음 while 루프를 사용하여 XmlReader의 Read 메서드를 사용하여 노드별로 XML 파일을 읽습니다.

루프 내에서 먼저 XmlReader의 NodeType 및 Name 속성을 사용하여 현재 노드가 직원 요소인지 확인합니다. 그렇다면 GetAttribute 메서드를 사용하여 id 속성의 값을 검색합니다.

다음으로 ReadToDescendant 메서드를 사용하여 직원 요소 내의 이름 요소로 판독기를 이동합니다. 그런 다음 ReadElementContentAsString 함수를 사용하여 이름 요소의 값을 가져옵니다.

마찬가지로 ReadToNextSibling 메서드를 사용하여 판독기를 다음 형제 요소로 이동하고 부서 및 급여 요소의 값을 가져옵니다.

마지막으로 using 블록을 사용하여 XML 파일 읽기를 마친 후 XmlReader 개체가 적절하게 삭제되도록 합니다.

4: XML에서 LINQ로

C#에서 LINQ to XML을 사용하여 XML 파일을 읽는 것은 XML 데이터에 액세스하고 조작하는 강력한 방법입니다. LINQ to XML은 XML 데이터 작업을 위한 간단하고 효율적인 API를 제공하는 LINQ 기술의 구성 요소입니다.

시스템 사용;
System.Linq 사용;
System.Xml.Linq 사용;

수업 프로그램
{
정적 무효 메인 ( [ ] 인수 )
{
XDocument 문서 = XDocument.Load ( '직원.xml' ) ;

var 직원 = e에서 ~에 doc.Descendants ( '직원' )
선택하다 새로운
{
ID = e.Element ( 'ID' ) .값,
이름 = e.Element ( '이름' ) .값,
부서 = e.Element ( '부서' ) .값,
급여 = e.Element ( '샐러리' ) .값
} ;
각각 ( var 직원 ~에 직원 )
{
콘솔.쓰기줄 ( $ 'ID: {employee.Id}, 이름: {employee.Name}, 부서: {employee.Department}, 급여: {employee.Salary}' ) ;
}
}
}

이 코드에서는 먼저 XDocument.Load() 메서드를 사용하여 XML 파일을 로드합니다. 그런 다음 LINQ to XML을 사용하여 XML 데이터를 쿼리하고 각 직원 요소에 대한 ID, 이름, 부서 및 급여 요소를 선택합니다. 이 데이터를 익명 유형으로 저장한 다음 결과를 반복하여 직원 정보를 콘솔에 출력합니다.

5: XPath 사용

XPath는 특정 요소, 특성 및 노드를 찾기 위해 XML 문서를 탐색하는 데 사용되는 쿼리 언어입니다. XML 문서에서 정보 검색 및 필터링을 위한 효과적인 도구입니다. C#에서는 XPath 언어를 사용하여 XML 파일에서 데이터를 읽고 추출할 수 있습니다.

시스템 사용;
System.Xml.XPath 사용;
System.Xml 사용;

수업 프로그램
{
정적 무효 메인 ( [ ] 인수 )
{
XmlDocument 문서 = 새 XmlDocument ( ) ;
문서.로드 ( '직원.xml' ) ;

// 문서에서 XPathNavigator 만들기
XPathNavigator 탐색 = doc.CreateNavigator ( ) ;

// XPath 식 컴파일
XPath 표현식 특급 = nav.Compile ( '/직원/직원/이름' ) ;

// 식을 평가하고 결과를 반복합니다.
XPathNodeIterator 반복자 = nav.Select ( 특급 ) ;
~하는 동안 ( iterator.MoveNext ( ) )
{
콘솔.쓰기줄 ( 반복자.현재.값 ) ;
}
}
}

이 코드는 XmlDocument를 사용하여 'employees.xml' 파일을 로드하고 문서에서 XPathNavigator를 만들고 XPath 식을 컴파일하여 요소 아래의 모든 요소를 선택합니다. 그런 다음 식을 평가하고 결과를 반복하여 각 요소의 값을 출력합니다.

메모: XPath를 사용하는 것은 XML 문서에서 요소와 속성을 선택하는 강력하고 유연한 방법이 될 수 있지만 우리가 논의한 다른 방법보다 더 복잡할 수도 있습니다.

결론

XmlDocument 클래스를 사용하면 전체 DOM 조작 기능이 제공되지만 다른 방법보다 속도가 느리고 메모리를 많이 사용할 수 있습니다. XmlReader 클래스는 빠른 전달 전용 및 캐시되지 않은 스트림 기반 접근 방식을 제공하므로 큰 XML 파일을 읽기 위한 좋은 옵션입니다. XDocument 클래스는 더 간단하고 간결한 구문을 제공하지만 XmlReader만큼 성능이 좋지 않을 수 있습니다. 또한 LINQ to XML 및 XPath 메서드는 XML 파일에서 특정 데이터를 추출하는 강력한 쿼리 기능을 제공합니다.