C#에서 Xml 다루기
작성날짜 2025/01/02
xml 로고, 귀여운 것 같다
XDocument
c#에서는 XDocument 클래스를 통해 xml 문서를 다루며 XDocument 클래스 하위에 XElement 노드를 추가하여 계층 구조를 표현합니다.
XDocument srcTree = new XDocument(
new XComment("This is a comment"),
new XElement("Root",
new XElement("Child1", "data1"),
new XElement("Child2", "data2"),
new XElement("Child3", "data3"),
new XElement("Child2", "data4"),
new XElement("Info5", "info5"),
new XElement("Info6", "info6"),
new XElement("Info7", "info7"),
new XElement("Info8", "info8")
)
);
위와 같은 코드를 실행하여 파일로 저장하면
<?xml version="1.0" encoding="utf-8"?>
<!--This is a comment-->
<Root>
<Child1>data1</Child1>
<Child2>data2</Child2>
<Child3>data3</Child3>
<Child2>data4</Child2>
<Info5>info5</Info5>
<Info6>info6</Info6>
<Info7>info7</Info7>
<Info8>info8</Info8>
</Root>
이런 내용의 xml 파일이 됩니다.
위 코드와 결과를 살펴보면
- XDocument는 XML 파일
- XComment는 주석
- XElement는 요소
각각 이렇게 표현된다는 것을 알 수 있습니다.
XML Serializer
Deserialize, Xml 문자열을 객체로 변환
straem 등으로 읽어 온 xml 문자열을 바로 c# 객체로 변환할 수도 있습니다. 아래 코드는 xml 문자열을 User의 ObservableCollection으로 변환하는 것을 보여줍니다.
string UserXamlString = @"<ArrayOfUser xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
<User>
<Name>GilDong</Name>
<Age>30</Age>
</User>
<User>
<Name>YoungHui</Name>
<Age>20</Age>
</User>
<User>
<Name>JiSu</Name>
<Age>10</Age>
</User>
</ArrayOfUser>
";
XmlSerializer xs = new XmlSerializer(typeof(ObservableCollection<User>));
using (var reader = new StringReader(UserXamlString))
{
return (ObservableCollection<User>)xs.Deserialize(reader);
}
Serialize, 객체를 Xml 문자열로 변환
반대로 객체를 xml 문자열로 변환할 수도 있습니다.
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<User>));
using (var stringWriter = new StringWriter())
{
serializer.Serialize(stringWriter, value);
return stringWriter.ToString();
}
참고: XDocument 클래스